我似乎无法弄清楚如何从反射中调用非静态方法(实例方法).我究竟做错了什么?真的很新/无知与反思(如果你没有注意到):
例:
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)
你有两个问题:
你的BindingFlags不正确.它应该是:
MethodInfo method = t.GetMethod("Handle", BindingFlags.Instance | BindingFlags.Public);
Run Code Online (Sandbox Code Playgroud)
或者您可以一起删除绑定标记并使用默认绑定行为,这在这种情况下将起作用.
您Handle
所申报的方法采用零个参数,但你有一个参数调用它("Hello"
).向Handle添加字符串参数:
public void Handle(string something)
{
Console.WriteLine("Order 1 ");
}
Run Code Online (Sandbox Code Playgroud)
或者不传递任何参数.
归档时间: |
|
查看次数: |
6139 次 |
最近记录: |