我似乎不知道如何从反射调用非静态方法(实例方法)。我做错了什么?真正的新/无知与反思(如果你还没有注意到):
的例子:
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 ");
}
}
你有两个问题:
-
你的BindingFlags不正确。应该是:
MethodInfo method = t.GetMethod("Handle", BindingFlags.Instance | BindingFlags.Public);
或者你可以把所有的绑定标志都去掉,使用默认绑定行为,这在这种情况下是有效的。 你的
添加一个字符串参数Handle
方法声明为零参数,但你用一个参数("Hello"
)调用它。给Handle:public void Handle(string something) { Console.WriteLine("Order 1 "); }
你应该使用
BindingFlags.Instance | BindingFlags.Public
呼叫GetMethod()
。
BindingFlags.InvokeMethod
(和其他调用标志)不被GetMethod()
使用。您可以在Type.InvokeMember()
的文档中看到它的含义。
您需要包含BindingFlags.Instance
除了已经提到的绑定标志之外,您似乎正在尝试将参数传递给不接受任何参数的方法