-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. 2 番目のパラメーター:

    呼び出されたメソッドまたはコンストラクターの引数リスト。[...]

これは、たとえば次のようにして、クラスのインスタンスが必要であることを意味します

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

次に、そのインスタンスでメソッドを呼び出し、JSON引数として渡すことができます。

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 に答える