0

メソッドの名前があります: "Garden.Plugins.Code.Beta.Business.CalculateRest"

実行方法は?RunMethod(string MethodName) のようなこの派手なリフレクションベースのソリューションについて考えます

4

4 に答える 4

3
  • 最後のドットで分割して、型名とメソッド名に分割します
  • Type.GetTypeまたはAssembly.GetTypeを使用して型を取得します。(Type.GetType は、引数でアセンブリ名を指定しない限り、現在実行中のアセンブリと mscorlib のみを検索します)。
  • Type.GetMethodを使用して型からメソッドを取得します。パブリック静的メソッドであると仮定して、 を指定しますBindingFlags.Public | BindingFlags.Static
  • MethodInfo.Invoke (null, null)を呼び出してメソッドを実行します。(最初の null は「ターゲットなし」を指定します。つまり、静的メソッドです。2 番目は引数を指定しません。)

インスタンス メソッドまたはパラメーターを受け取るメソッドを呼び出したい場合は、その情報を取得する方法も検討する必要があります。

于 2008-12-02T11:19:03.753 に答える
2

最後のドットの左側のすべてをリテラル型名として扱うほど単純ではありません。フォームのタイプがある場合:

XYZタイプ

X、Y、Z が名前空間であるとは限りません。それらは型自体である場合もあり、後続の部分は内部クラスである場合もあります。

class X
{
  class Y
  {
   // etc
  }
}

この場合、Type.GetType("X.YU") は Y クラスに解決されません。代わりに、clr は内部クラスを + 記号で区切るため、実際に Type.GetType("X+ Y");

呼び出しているメソッドがparamsメソッドの場合は、追加の作業が必要になります。変数パラメーターを配列にロールアップして、これを渡す必要があります。メソッドのParameterInfoデータを取得し、最後のパラメーターにParamArray属性が付加されているかどうかを確認することで、変数パラメーターを確認できます。

于 2008-12-02T12:12:58.107 に答える
1

型がインスタンス型の場合:

Type.GetType("Garden.Plugins.Code.Beta.Business")
    .GetMethod("CalculateRest").Invoke(myInstanceOfTheType, param1, param2);

静的メソッドの場合:

Type.GetType("Garden.Plugins.Code.Beta.Business")
    .GetMethod("CalculateRest").Invoke(null, param1, param2);

パラメータを取らない場合は、「param1、param2など」を省略してください...

于 2008-12-02T11:47:44.587 に答える
1

それは遅くなるでしょう、私を信じてください。したがって、重要な場所に置かないでください。

それ以外は、「手動」で行う必要があります。必要なものが見つかるまで、すべての名前空間、クラスなどの列挙を開始します。すでにこれを行う派手な既製のものはないと思います。(調べてないけど)

于 2008-12-02T11:14:02.517 に答える