クラス名とメソッド名を指定して静的クラスのメソッドを呼び出す方法を教えてください。例えばタイプ名とメソッド名が文字列である静的クラスのメソッドを呼び出す
:System.Environment
とGetFolderPath
考える
、私はEnvironment.GetFolderPath()
を呼び出すためにReflection
を使用したいと思います。ここで
クラス名とメソッド名を指定して静的クラスのメソッドを呼び出す方法を教えてください。例えばタイプ名とメソッド名が文字列である静的クラスのメソッドを呼び出す
:System.Environment
とGetFolderPath
考える
、私はEnvironment.GetFolderPath()
を呼び出すためにReflection
を使用したいと思います。ここで
だけ
typeName
文字列としてタイプの名前であり、
methodName
が文字列としてメソッドの名前であり、そして
arguments
を有するメソッドを呼び出す引数を含むオブジェクトの配列である
Type.GetType(typeName).GetMethod(methodName).Invoke(null, arguments);
。
は、あなたがどうなるのかの基本的なアウトラインです:
編集:これは、静的クラスの名前空間がわからない場合に機能します。さもなければDanielBrücknerのソリューションをはるかに簡単に使用してください。
は、私はあなたがまだのAppDomainをスキャンする必要があるんだと思う - あなただけのクラスのインスタンスを作成することができれば、これは動的言語 –
Type.GetTypeでしょうか? http://msdn.microsoft.com/en-us/library/w3f99sx1.aspx – dtb
これは、反射プロセス中に何が起こっているのかという文字通りの説明かもしれませんが、私はこの回答がOPに役立つとは思わないあなたが概説したステップがどのようにしてどのように使用されるかを実際に実証または説明するものではありません。ネットフレームワークAPI – Crippledsmurf
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);
あなたが(リフレクションを使用してアセンブリに反復することによって)タイプを取得する必要がありますまず
詳細については、このリンクを参照してください。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メソッドを取得するためにGetPropery
とGetGetMethod
メソッドを使用しているあなたがここでやっている
** MyClass **は公開されていますが、内部クラスではありません***? – Kiquenet
。
var getMethod = typeof(Environment).GetProperty("CurentDirectory", BindingFlags.Public | BindingFlags.Static).GetGetMethod();
var currentDirectory = (string)getMethod.Invoke(null, null);
プロパティのgetメソッドを呼び出すと、その値が返されます。
var value = Environment.CurrentDirectory;
うわー、うん、うんうん。Type.GetTypeについて知りませんでした。静的なクラス名が名前空間で完全修飾されていることを確認してください –
***内部静的クラス '***のために働いていますか? – Kiquenet
@ GeorgeMauer名前空間がない場合はどうなりますか? – MonsterMMORPG