在Reflection中调用非静态方法

时间:2011-12-12 19:07:11

标签: 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 ");
    }
}

4 个答案:

答案 0 :(得分:7)

你有两个问题:

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

    MethodInfo method = t.GetMethod("Handle", BindingFlags.Instance | BindingFlags.Public);
    

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

  2. 声明的Handle方法接受零参数,但您使用一个参数("Hello")调用它。将一个字符串参数添加到Handle:

    public void Handle(string something)
    {
        Console.WriteLine("Order 1 ");
    }
    

    或者不传递任何参数。

答案 1 :(得分:4)

你应该使用

BindingFlags.Instance | BindingFlags.Public

致电GetMethod()

BindingFlags.InvokeMethod未使用

GetMethod()(和其他调用标志)。你可以在the documentation for Type.InvokeMember()中看到它的含义。

答案 2 :(得分:3)

您需要加入BindingFlags.Instance

答案 3 :(得分:1)

除了已经提到的绑定标志之外,您似乎试图将参数传递给不带任何参数的方法。