2009-09-13 10 views

答えて

32

だけ

typeName文字列としてタイプの名前であり、 methodNameが文字列としてメソッドの名前であり、そして argumentsを有するメソッドを呼び出す引数を含むオブジェクトの配列である
Type.GetType(typeName).GetMethod(methodName).Invoke(null, arguments); 

+0

うわー、うん、うんうん。Type.GetTypeについて知りませんでした。静的なクラス名が名前空間で完全修飾されていることを確認してください –

+0

***内部静的クラス '***のために働いていますか? – Kiquenet

+0

@ GeorgeMauer名前空間がない場合はどうなりますか? – MonsterMMORPG

1

は、あなたがどうなるのかの基本的なアウトラインです:

  1. スキャン現在のAppDomain内のすべてのオブジェクト -
  2. であることをあなたが知っているクラス名と一致するものが静的メソッドを取得します見つけますそのオブジェクトにあなたが知っている名前で
  3. それを動的に呼び出します。

編集:これは、静的クラスの名前空間がわからない場合に機能します。さもなければDanielBrücknerのソリューションをはるかに簡単に使用してください。

+0

は、私はあなたがまだのAppDomainをスキャンする必要があるんだと思う - あなただけのクラスのインスタンスを作成することができれば、これは動的言語 –

+1

Type.GetTypeでしょうか? http://msdn.microsoft.com/en-us/library/w3f99sx1.aspx – dtb

+2

これは、反射プロセス中に何が起こっているのかという文字通りの説明かもしれませんが、私はこの回答がOPに役立つとは思わないあなたが概説したステップがどのようにしてどのように使用されるかを実際に実証または説明するものではありません。ネットフレームワークAPI – Crippledsmurf

1
System.Reflection.Assembly info = typeof(System.Environment).Assembly; 

Type t = info.GetType("System.Environment"); 
MethodInfo m = t.GetMethod("GetFolderPath"); 

object result = m.Invoke(null, arguments); 
3

あなたが(リフレクションを使用してアセンブリに反復することによって)タイプを取得する必要がありますまず

詳細については、このリンクを参照してください。http://msdn.microsoft.com/en-us/library/system.reflection.propertyinfo.aspx

またはあなたが持っている一度

Assembly.GetType 

を使用あなたはリフレクションを使ってメンバーを反復することができます。

MethodInfo method = typeof(MyClass).GetMethod("MyMethod"); 

を使用すると、呼び出すときにメソッドを呼び出すために引数を渡してMethodInfo.Invokeを使用できます。 Environment名前付きの型に反射して、そのようなEnvironment.CurrentDirectoryプロパティのgetメソッドを取得するためにGetProperyGetGetMethodメソッドを使用しているあなたがここでやっている

+0

** MyClass **は公開されていますが、内部クラスではありません***? – Kiquenet

1

var getMethod = typeof(Environment).GetProperty("CurentDirectory", BindingFlags.Public | BindingFlags.Static).GetGetMethod(); 
var currentDirectory = (string)getMethod.Invoke(null, null); 

プロパティのgetメソッドを呼び出すと、その値が返されます。

var value = Environment.CurrentDirectory; 
関連する問題