私はExpandoObjectを使用できるときになぜ動的MethodBagsを使用するのか理解していませんか?私はここで何が欠けていますか?C#4.0:ExpandoObjectがあるときにMethodBagを使用するのはなぜですか?
答えて
簡単な注意:動的メソッドバッグは、メソッドを動的にオブジェクトに追加する技術です。 Bill Wagnerはhereとソースコードhereを記述しています。
簡単な答えはMethodBagコンセプトはちょうどあなたのテクニックを示していることです。これを行うにはExpandoObjectを絶対に使用することができますが、System.Dynamic.DynamicObject
から継承した独自のクラスを作成するときがあります。たとえば、従来の文字通りの方法ではなく、ドットプロパティ表記でデータを参照できるようにする、動的JSON、YAML、またはXMLオブジェクトを提供することが考えられます。 DynamicObjectから継承する場合は、クラスに動的関数を追加することもできます。 MethodBagテクニックは、それを行う方法を示しています。 ExpandoObjectは、この手法を実装するクラスの単なる一例です。 ExpandoObjectはあなたが必要とするものの95%に適しています。また、MethodBagテクニックでは、最後の5%のためにそれを行うことを決定したときにカスタムを書く方法を示します。
メソッドバッグおよび類似の実装には、いくつかの制限がある傾向があります。これらのロードブロッキングに遭遇した場合は、自分のクラスを実装するほうが簡単かもしれません。具体的には:
メソッドバッグには実装が難しい。 (式ツリーには、静的に入力されたオブジェクトが含まれていることはありません。
dynamic
、同じ動的オブジェクトの内部状態に依存するメソッドを作成するための構文はありません)。publicメソッドのみを追加できます。仮想、個人、保護、または抽象メソッドはありません。
インターフェイスを実装できません。
これに対して、ExpandoObjects
は、真のクラスであり、より豊かでフル機能です。 RubyやPythonのように、あなたが自由に入手できるものをより密接に模倣しています。
- 1. フォームイベントがあるときにWndProcを使用するのはなぜですか?
- 2. C#4.0で使用されているCOMライブラリで、動的なタイプを頻繁に使用する必要があるのはなぜですか?
- 3. 非汎用タスク(C#4.0以降)でタスクの結果プロパティを使用できないのはなぜですか?
- 4. .NET 4.0 Client ProfileでSystem.Data.OracleClientを使用できないのはなぜですか?
- 5. C#4.0でEnterpriseライブラリとmysqlデータベースを使用するには?
- 6. なぜ?と?を使用する必要があるのはなぜですか?一緒にならずに
- 7. パラメータでconstを使用しないときにC++コンパイラがコンパイルに失敗するのはなぜですか?
- 8. 式でnullableを使用するときにC#で括弧が必要なのはなぜですか?
- 9. なぜcでundefined structを使用できるのですか
- 10. イテレータを使用するときにランダムジェネレータを再配置する必要があるのはなぜですか?
- 11. TensorFlowでスパーステンソルを使用するときに勾配が使用できないのはなぜですか?
- 12. なぜC#4.0は匿名オブジェクトの初期化コードで末尾のカンマを使用できますか?
- 13. .NET4 ExpandoObjectの使用メモリが漏れる
- 14. let(ES6)を使用するときにクロージャを使用する必要がないのはなぜですか?
- 15. マシュマロデバイスでナビゲーションドロワーを使用しているときに、アクティビティにタイトルバーが2つあるのはなぜですか?
- 16. Cコードの下にセグメンテーションフォルトがあるのはなぜですか?
- 17. リンクリストを作成するときにポインタをポイントする必要があるのはなぜですか?C++
- 18. C++でvolatileキーワードを使用するのはなぜですか?
- 19. MySQLの一時テーブルがあるときにRedisを使用するのはなぜですか?
- 20. Visual Studio 2008でC#4.0を使用できますか?
- 21. C#4.0でオプション/名前付きパラメータを使用する方法
- 22. リストに配列があるのはなぜですか? C#
- 23. ExecutorServiceを使用できるときに@AsynchronousをEJBで使用するのはなぜですか?
- 24. C#では、なぜ動的型を使用するとジェネリックで演算子を使用できますか?
- 25. 私のC++コードをすべて.hファイルに入れることができるのであれば、.cppファイルを使用するのはなぜですか?
- 26. persistence.xmlを使用するときにTomcat 7でHibernate 4.0を使用するとJndiExceptionが発生する
- 27. C#でDateTimeにNULLを使用できないのはなぜですか?
- 28. C#4.0マルチスレッドループ:いつ使用するか、使用しない場合は?
- 29. ROLLUP演算子を使用するときにDISTINCTキーワードを使用できないのはなぜですか?
- 30. Specflowがあるときになぜコード化UIを使用する必要がありますか?
ありがとうございました。しかし、私はあなたが私の質問を逆転したと思います。なぜ私はMethodBagsを使うことができるのかExpandOObjectを使うのではなく、なぜExpandoObjectを使うのではなく、なぜMethodBagsを使うのか尋ねていました。 –
@ stimply77、methodbagsは特定のレベルに制限されていますが、johnはintefacesとより具体的な型を実装したいmethodbgsは使用できないと述べています。 – RameshVel
@ stimpy77:私の主張はそれほど理由はありませんあなたはいくつかの方法を除いて絶対に何も必要ありません。 ExpandoObjectはより一般的な選択肢のようです。 –