-2

我有课

private class MyRouter
{
   public string Json {get;set;}
   public string Class { get; set; }
   public string Method { get; set; }
}

它必须通过 Json Arg 从类中调用方法,我如何通过反射来做到这一点?我这样做了,但没有任何帮助

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);
4

2 回答 2

5

请参阅MethodBase.Invoke的文档:

  1. 第一个参数:

    调用方法或构造函数的对象。[...]

  2. 第二个参数:

    调用的方法或构造函数的参数列表。[...]

这意味着您需要一个类的实例,例如通过执行以下操作

ConstructorInfo constr = t.GetConstructor(Type.EmptyTypes);
object myObj = constr.Invoke(new object[]{});

然后您可以在该实例上调用您的方法并传递您的JSONas 参数:

var x = t.GetMethod(MR.Method).Invoke(myObj,MR.Json);
于 2013-09-17T11:35:03.807 回答
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 });
于 2013-09-17T11:37:02.510 回答