動的型の非常に大きな利点は、C# と外部および非ネイティブ オブジェクト (特に COM オブジェクト) との関係について考え始めるときに得られます。この場合、COM IDispatch インターフェイスを使用して動的型が解決されます。つまり、Primary Interop Assembly (PIA) を使用せずに、COM オブジェクトを「そのまま」使用できることを意味します。多くの COM オブジェクトは、さまざまな標準データ型のいずれかを格納できるバリアント型を広範に使用するため、バリアントの代わりに動的型を使用できると非常に簡単になります。
C# で dynamic がどのように使用されているかは既に知っていますが、その方法を知りたいです (通常は COM を使用)。
Office COM オブジェクト モデルの例を見る:
(Excel.Range)excel.Cells[1,1]).Value= "some string"
はオブジェクト タイプを使用してバリアントを表すため、キャストを含める必要があります。PIA
現在(2010 ...)、動的では次のように実行できます:
excel.Cells[1,1].Value= "some string"
しかし
オブジェクトは、実装することによってバインディング セマンティクスを提供できます。DynamicObject
そのような :
public class MyClass: DynamicObject
{
public override bool TryInvokeMember ( InvokeMemberBinder binder, object[] args, out object result)
{
...
}
}
だから私の質問:
MSは動作[changed] or [added code] or [now-inherit-DynamicObject]
を許可するために COM オブジェクトを使用excel.Cells[1,1].Value= "some string"
しましたか?
彼らはこのメカニズム全体を再構築しましたか?