182

System.Dynamic.ExpandoObjectの違いは何ですか?System.Dynamic.DynamicObjectdynamic

どのような状況でこれらのタイプを使用しますか?

4

4 に答える 4

163

キーワードは、dynamicレイトバウンドする必要がある変数を宣言するために使用されます。
実行時バインディングを使用する場合は、実際のタイプまたは想像上のタイプに対して、dynamicキーワードを使用すると、コンパイラーが残りの作業を行います。

キーワードを使用dynamicして通常のインスタンスと対話する場合、DLRはインスタンスの通常のメソッドへのレイトバウンド呼び出しを実行します。

このIDynamicMetaObjectProviderインターフェースにより、クラスはレイトバウンドの動作を制御できます。
キーワードを使用dynamicして実装と対話するとIDynamicMetaObjectProvider、DLRがIDynamicMetaObjectProviderメソッドを呼び出し、オブジェクト自体が何をするかを決定します。

ExpandoObjectとクラスはのDynamicObject実装ですIDynamicMetaObjectProvider

ExpandoObjectdynamicは、インスタンスにメンバーを追加してそれらを味方に使用できるようにする単純なクラスです。
DynamicObjectは、カスタマイズされた動作を簡単に提供するために継承できる、より高度な実装です。

于 2010-08-25T11:57:37.620 に答える
37

C#によると、言語仕様dynamicは型宣言です。つまりdynamic x、変数xのタイプはdynamic。です。

DynamicObjectは、実装を容易にしIDynamicMetaObjectProvider、そのタイプの特定のバインディング動作をオーバーライドできるタイプです。

ExpandoObjectプロパティバッグのように機能するタイプです。つまり、実行時にこのタイプの動的インスタンスにプロパティやメソッドなどを追加できます。

于 2010-08-25T11:56:16.340 に答える