使用Reflection调用方法不起作用

时间:2013-09-17 11:15:13

标签: c# asp.net reflection

我有一个班级

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

2 个答案:

答案 0 :(得分:5)

请参阅MethodBase.Invoke的文档:

  1. 第一个参数:

      

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

  2. 第二个参数:

      

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

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

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