我有一个班级
private class MyRouter
{
public string Json {get;set;}
public string Class { get; set; }
public string Method { get; set; }
}
它必须通过Json Arg调用Class中的Method,我怎样才能通过Reflection实现它? 我做了这个,但没有任何帮助
MyRouter MR = new MyRouter(){initilising the class};
Assembly assembly = Assembly.Load("Common");
Type t = assembly.GetType("Common." + MR.Class);
var x = t.GetMethod(MR.Method ).Invoke(MR.Json,null);
答案 0 :(得分:5)
请参阅MethodBase.Invoke的文档:
第一个参数:
调用方法或构造函数的对象。 [...]
第二个参数:
调用的方法或构造函数的参数列表。 [...]
这意味着您需要一个类的实例,例如通过执行以下操作
ConstructorInfo constr = t.GetConstructor(Type.EmptyTypes);
object myObj = constr.Invoke(new object[]{});
然后,您可以在该实例上调用您的方法并将JSON
作为参数传递:
var x = t.GetMethod(MR.Method).Invoke(myObj,MR.Json);
答案 1 :(得分:1)
如果您要调用的方法是static
,则可以使用
var x = t.GetMethod(MR.Method).Invoke(null, new object[] { MR.Json });
如果不是static
,则需要创建对象的新实例并使用它来调用该调用。你可以使用
var obj = Activator.CreateInstance(t);
var x = t.GetMethod(MR.Method).Invoke(obj, new object[] { MR.Json });