MethodInfo.Invoke()
反射调用时,必须传递所有参数, 无论是否有默认参数。
public class InvokeTarget { public static void Invoke1(int a) { } public static void Invoke2(Action<int> a, int b = 0) { } public void Invoke3() { } } public class Caller { void CallFunction() { // get type, 如果不知道目标类型, 就通过assembly去找,懒得写了 var @it = typeof(InvokeTarget); // get target var @it2 = new InvokeTarget(); @it.GetMethods().Where(x => x.Name == "Invoke1").ToArray()[0] .Invoke(@it, new object[] { 1 }); // 必须传完整参数列表 @it.GetMethods().Where(x => x.Name == "Invoke2").ToArray()[0] .Invoke(@it, new object[] { new Action<int>(Invoke2CallBack), 3 }); @it.GetMethods().Where(x => x.Name == "Invoke3").ToArray()[0] .Invoke(@it2, null); } void Invoke2CallBack(int a) { } }