C#のどのオブジェクトでも、静的に定義された(「静的」という意味で「コンパイル時に決定」という意味で「クラスレベルメンバ」という意味ではなく)メソッドを動的に呼び出す場合は、クラスが露出していないに応答インスタンスメソッドはTryInvokeMember
を使用して呼び出し、動的メソッドしかし、オブジェクトが(未定義)するDynamicObject
応答から継承して動的に動的オブジェクトのメソッドを動的に呼び出すにはどうすればよいですか?
typeof(Foo).GetMethod("Bar").Invoke(foo, new object[] { /* params */ });
を:その方法へのハンドルを取得し、それを呼び出すために反射明白な理由から、反射を通して。これは、応答するメソッドのメソッドハンドルをTryInvokeMember
で取得できないことを意味します。
逆説的に、dynamic
オブジェクトの動的メソッドを、dynamic
オブジェクトで定義されたメソッドと同じように簡単に呼び出すことはできないようです。
私はTryInvokeMember
を直接呼び出すと考えましたが、最初の引数は抽象クラスInvokeMemberBinder
のインスタンスでなければなりません。私は、動的オブジェクト上で動的メソッドを呼び出すクラスを実装する必要がある場合は、何か間違っている必要があります。
TryInvokeMember
を使用して対応する必要があることをしないということ?知って、その名前で
dynamic
オブジェクトのメソッドを呼び出すことができますどのように
楽しい音。私は誰かが実際にサポートされている解決策を持っているかどうかを確認するのを待つつもりです。 – zneak
一方、それはコンパイラがすでに行っていることなので、今日構築された 'dynamic'を使っているアプリケーションを殺すことはないので、動作を止めることはまずありません。 – zneak
@zneakそれはかなり安全だと思うでしょう。型が隠されていることを保証するほどの長さになったのは単なる驚くべきことです。 – Trillian