Fivee

导航

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)
    {

    }
}

 

posted on 2020-11-17 15:49  Fivee  阅读(1002)  评论(0编辑  收藏  举报