调用反射中的非静态方法



我似乎不知道如何从反射调用非静态方法(实例方法)。我做错了什么?真正的新/无知与反思(如果你还没有注意到):

的例子:

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

你有两个问题:

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

    MethodInfo method = t.GetMethod("Handle", BindingFlags.Instance | BindingFlags.Public);
    
  2. 或者你可以把所有的绑定标志都去掉,使用默认绑定行为,这在这种情况下是有效的。
  3. 你的Handle方法声明为零参数,但你用一个参数("Hello")调用它。给Handle:

    添加一个字符串参数
    public void Handle(string something)
    {
        Console.WriteLine("Order 1 ");
    }
    

你应该使用

BindingFlags.Instance | BindingFlags.Public

呼叫GetMethod()

BindingFlags.InvokeMethod(和其他调用标志)不被GetMethod()使用。您可以在Type.InvokeMember()的文档中看到它的含义。

您需要包含BindingFlags.Instance

除了已经提到的绑定标志之外,您似乎正在尝试将参数传递给不接受任何参数的方法

相关内容

  • 没有找到相关文章

最新更新