とSystem.Dynamic.ExpandoObject
の違いは何ですか?System.Dynamic.DynamicObject
dynamic
どのような状況でこれらのタイプを使用しますか?
とSystem.Dynamic.ExpandoObject
の違いは何ですか?System.Dynamic.DynamicObject
dynamic
どのような状況でこれらのタイプを使用しますか?
キーワードは、dynamic
レイトバウンドする必要がある変数を宣言するために使用されます。
実行時バインディングを使用する場合は、実際のタイプまたは想像上のタイプに対して、dynamic
キーワードを使用すると、コンパイラーが残りの作業を行います。
キーワードを使用dynamic
して通常のインスタンスと対話する場合、DLRはインスタンスの通常のメソッドへのレイトバウンド呼び出しを実行します。
このIDynamicMetaObjectProvider
インターフェースにより、クラスはレイトバウンドの動作を制御できます。
キーワードを使用dynamic
して実装と対話するとIDynamicMetaObjectProvider
、DLRがIDynamicMetaObjectProvider
メソッドを呼び出し、オブジェクト自体が何をするかを決定します。
ExpandoObject
とクラスはのDynamicObject
実装ですIDynamicMetaObjectProvider
。
ExpandoObject
dynamic
は、インスタンスにメンバーを追加してそれらを味方に使用できるようにする単純なクラスです。
DynamicObject
は、カスタマイズされた動作を簡単に提供するために継承できる、より高度な実装です。
C#によると、言語仕様dynamic
は型宣言です。つまりdynamic x
、変数x
のタイプはdynamic
。です。
DynamicObject
は、実装を容易にしIDynamicMetaObjectProvider
、そのタイプの特定のバインディング動作をオーバーライドできるタイプです。
ExpandoObject
プロパティバッグのように機能するタイプです。つまり、実行時にこのタイプの動的インスタンスにプロパティやメソッドなどを追加できます。