在Reflection中调用非静态方法

sca*_*cci 2 c# reflection

我似乎无法弄清楚如何从反射中调用非静态方法(实例方法).我究竟做错了什么?真的很新/无知与反思(如果你没有注意到):

例:

class Program
{
    static void Main()
    {
        Type t = Type.GetType("Reflection.Order" + "1");
        var instance = Activator.CreateInstance(t);
        object[] paramsArray = new object[] { "Hello" };
        MethodInfo method = t.GetMethod("Handle", BindingFlags.InvokeMethod | BindingFlags.Public);

        method.Invoke(instance, paramsArray);

        Console.Read();
    }
}



public class Order1
{
    public void Handle()
    {
        Console.WriteLine("Order 1 ");
    }
}
Run Code Online (Sandbox Code Playgroud)

vcs*_*nes 7

你有两个问题:

  1. 你的BindingFlags不正确.它应该是:

    MethodInfo method = t.GetMethod("Handle", BindingFlags.Instance | BindingFlags.Public);
    
    Run Code Online (Sandbox Code Playgroud)

    或者您可以一起删除绑定标记并使用默认绑定行为,这在这种情况下将起作用.

  2. Handle所申报的方法采用零个参数,但你有一个参数调用它("Hello").向Handle添加字符串参数:

    public void Handle(string something)
    {
        Console.WriteLine("Order 1 ");
    }
    
    Run Code Online (Sandbox Code Playgroud)

    或者不传递任何参数.