C# の任意のオブジェクトで、静的に定義された (「クラス レベルのメンバー」という意味ではなく、「コンパイル時に決定される」という意味で「静的に」) メソッドを動的に呼び出したい場合は、リフレクションを使用してそのメソッドへのハンドルを取得して呼び出します。
typeof(Foo).GetMethod("Bar").Invoke(foo, new object[] { /* params */ });
DynamicObject
ただし、を使用して応答する (未定義の) インスタンス メソッド呼び出しから継承することによって動的に作成されたオブジェクトTryInvokeMember
と、クラスが応答する動的メソッドは、明らかな理由により、リフレクションによって公開されません。これは、 によって応答されるべきメソッドのメソッド ハンドルを取得できないことを意味しTryInvokeMember
ます。
皮肉なことdynamic
に、非オブジェクトで定義済みメソッドを呼び出すのと同じくらい簡単に、オブジェクトで動的メソッドを動的に呼び出すことはできないように思えdynamic
ます。
TryInvokeMember
直接呼び出すことを検討しましたが、最初の引数はInvokeMemberBinder
、抽象クラスのインスタンスでなければなりません。動的オブジェクトで動的メソッドを呼び出すクラスを実装する必要がある場合、何か間違ったことをしているに違いないと感じています。
dynamic
オブジェクトのメソッドをその名前で呼び出すにはどうすればよいTryInvokeMember
ですか?