5

Anders によると、C#4.0 では、動的型、または「静的型が動的」なオブジェクトを取得します。これにより、メソッド呼び出しの解決をコンパイル時ではなく実行時に行うことができます。しかし、有効である可能性が低いことがわかっている場合でも、動的オブジェクトの呼び出しを許可するのではなく、動的オブジェクトを何らかのコントラクトにバインドする (したがって、完全なインテリセンスを取得する) 機能はありますか?

つまり、ただの代わりに

dynamic foo = GetSomeDynamicObject();

次のような既知のコントラクトに制約するためにキャストまたは変換する機能があります。

IFoo foo2 = foo.To<IFoo>;

または単に

IFoo foo2 = foo as IFoo;

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

4

3 に答える 3

2

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

于 2008-11-03T21:14:01.807 に答える
1

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

于 2008-11-03T21:44:21.120 に答える
1

Tobias Hertkorn は、 MetaObjectで Convert() メソッドを使用して動的プロキシを返す方法の例を示す彼のブログ投稿へのリンクで、私の質問に答えました。それは非常に有望に見えます。

于 2008-11-04T08:29:46.653 に答える