2009-11-23 2 views

答えて

5

簡単な注意:動的メソッドバッグは、メソッドを動的にオブジェクトに追加する技術です。 Bill Wagnerはhereとソースコードhereを記述しています。


簡単な答えはMethodBagコンセプトはちょうどあなたのテクニックを示していることです。これを行うにはExpandoObjectを絶対に使用することができますが、System.Dynamic.DynamicObjectから継承した独自のクラスを作成するときがあります。たとえば、従来の文字通りの方法ではなく、ドットプロパティ表記でデータを参照できるようにする、動的JSON、YAML、またはXMLオブジェクトを提供することが考えられます。 DynamicObjectから継承する場合は、クラスに動的関数を追加することもできます。 MethodBagテクニックは、それを行う方法を示しています。 ExpandoObjectは、この手法を実装するクラスの単なる一例です。 ExpandoObjectはあなたが必要とするものの95%に適しています。また、MethodBagテクニックでは、最後の5%のためにそれを行うことを決定したときにカスタムを書く方法を示します。

7

メソッドバッグおよび類似の実装には、いくつかの制限がある傾向があります。これらのロードブロッキングに遭遇した場合は、自分のクラスを実装するほうが簡単かもしれません。具体的には:

  • メソッドバッグには実装が難しい。 (式ツリーには、静的に入力されたオブジェクトが含まれていることはありません。dynamic、同じ動的オブジェクトの内部状態に依存するメソッドを作成するための構文はありません)。

  • publicメソッドのみを追加できます。仮想、個人、保護、または抽象メソッドはありません。

  • インターフェイスを実装できません。

これに対して、ExpandoObjectsは、真のクラスであり、より豊かでフル機能です。 RubyやPythonのように、あなたが自由に入手できるものをより密接に模倣しています。

+0

ありがとうございました。しかし、私はあなたが私の質問を逆転したと思います。なぜ私はMethodBagsを使うことができるのかExpandOObjectを使うのではなく、なぜExpandoObjectを使うのではなく、なぜMethodBagsを使うのか尋ねていました。 –

+0

@ stimply77、methodbagsは特定のレベルに制限されていますが、johnはintefacesとより具体的な型を実装したいmethodbgsは使用できないと述べています。 – RameshVel

+0

@ stimpy77:私の主張はそれほど理由はありませんあなたはいくつかの方法を除いて絶対に何も必要ありません。 ExpandoObjectはより一般的な選択肢のようです。 –

関連する問題