C#4.0動的オブジェクトには、アヒルのタイピング機能がありますか?

StackOverflow https://stackoverflow.com/questions/259929

  •  06-07-2019
  •  | 
  •  

質問

C#4.0では、動的型、または「静的型が動的」であるオブジェクトを取得します、Anders氏によれば。これにより、コンパイル時ではなく実行時にメソッド呼び出しの解決が可能になります。しかし、動的オブジェクトを何らかの種類のコントラクトにバインドする機能があります(それにより、完全なインテリセンスを取得します)。

つまりただの代わりに

dynamic foo = GetSomeDynamicObject();

キャストまたは変換して、既知のコントラクト(たとえば、

IFoo foo2 = foo.To<IFoo>;

または単に

IFoo foo2 = foo as IFoo;

C#4.0の既存の資料にはそのようなものは見つかりませんが、動的パラダイムの論理的な拡張のようです。詳細情報をお持ちですか?

役に立ちましたか?

解決

私は本当にカモのタイピングに似たものを知りません、私は恐れています。 アイデアについてブログに書いたが、私はサポートを期待していない。おそらく、Reflection.Emitを使用して、特定のインターフェイスの実装を生成するクラスを作成し、コンストラクターで動的オブジェクトを取得し、それを介して各呼び出しをプロキシすることはそれほど難しくないでしょう。理想的ではありませんが、一時的なものかもしれません。

他のヒント

それは素晴らしいアイデアです。 私があなたを理解しているなら、あなたはCLRの機能を説明/提案しているので、動的オブジェクトをインターフェイスにキャストしようとすると、動的オブジェクトがサポートするメソッド/プロパティを見て、それがそのインターフェースを効果的に実装します。その後、CLRがオブジェクトの「IFooの実装」を処理するため、動的オブジェクトをIFooにキャストできます。 それがサポートされないことはほぼ確実ですが、それは興味深いアイデアです。

Tobias Hertkornが私の質問こちらにリンクで回答しました彼の blogpost は、MetaObjectでConvert()メソッドを使用して動的プロキシを返す方法の例を示しています。とても有望に見えます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top