[この記事は18年前に書かれました]
指定の名前のメソッドを実行するには、TypeクラスのInvokeMember()メソッドを使用します。
InvokeMemberの引数はわかりにくいですが、左から 「実行するメソッドの名前、BindingsFlags(以下参照)、Binder、呼び出し元インスタンス、引数」です。
namespace TestSpace { class TestClass { public void Method(string str) { Console.WriteLine(str); } } } // publicメソッドを実行 TestClass target = new TestClass(); target.GetType().InvokeMember("Method", BindingFlags.InvokeMethod, null, target, new object[] { "test" }); // privateメソッドの場合は、BindingFlagsに、「BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.NonPublic」を指定。
出力:test
これらは、メソッドの例ですが、プロパティやフィールドに対しても処理可能です。 その場合は、BindingFlagsに、「GetProperty,SetProperty,GetField,SetField」等を使用します。
コメント