public static object InvokeCallable(object target, object[] args)
{
if (null == target) throw new ArgumentNullException("target");
if (null == args) throw new ArgumentNullException("args");
var c = target as ICallable;
if (null != c) return c.Call(args);
var d = target as Delegate;
if (null != d) return d.DynamicInvoke(args);
var type = target as Type;
if (null != type) return Activator.CreateInstance(type, args);
return ((MethodInfo)target).Invoke(null, args);
}