6

C# 4.0 で「メソッド欠落」セマンティクスなどを実装するには、IDynamicObject を実装する必要があります。

public interface IDynamicObject
{
  MetaObject GetMetaObject(Expression parameter);
}

私が知る限り、IDynamicObject は実際には DLR の一部であるため、新しいものではありません。しかし、私はそれに関する多くのドキュメントを見つけることができませんでした.

非常に単純な実装例がいくつかあります (fx hereおよびhere ) が、より完全な実装または実際のドキュメントを教えてくれる人はいますか?

特に、「パラメーター」パラメーターをどのように正確に処理することになっていますか?

4

5 に答える 5

4

簡単に言えば、MetaObject は、呼び出しサイトで実行されるコードを実際に生成する役割を担っているということです。これに使用されるメカニズムは、DLR で強化された LINQ 式ツリーです。したがって、オブジェクトから始めるのではなく、オブジェクトを表す式から始めます。最終的には、実行するアクションを記述する式ツリーを返す必要があります。

これを試すときは、CTP の System.Core のバージョンが 8 月末のスナップショットから取得されたことを思い出してください。これは、IronPython の特定のベータ版に完全に対応しているわけではありません。それ以来、DLR には多くの変更が加えられています。

また、CLR v2 System.Core との互換性のために、ベータ 4 またはベータ 5 以降の IronPython のリリースでは、System 名前空間にあるすべての名前が代わりに Microsoft 名前空間に変更されるようになりました。

于 2008-10-29T13:00:14.727 に答える
3

ソース コードを含むエンド ツー エンドのサンプルが必要な場合は、任意のプロパティの値をディクショナリに格納する動的オブジェクトが必要な場合は、私の投稿「C# 4.0 でのダック タイピングの初見」が適している可能性があります。動的オブジェクトを静的に型付けされたインターフェイスにキャストする方法を示すために、その投稿を書きました。IDynamicObject であり、IQuack のように機能する Duck の完全に機能する実装が含まれています。

さらに詳しい情報が必要な場合は、私のブログで私に連絡してください。できる限りお手伝いします。

于 2008-11-04T00:25:26.100 に答える
2

ここでこれを行う方法についてブログを書きました:

http://mikehadlow.blogspot.com/2008/10/dynamic-dispatch-in-c-40.html

于 2008-10-30T09:49:47.950 に答える
0

これが私がこれまでに理解したことです:

動的言語ランタイムは現在、IronPython プロジェクトの一部として維持されています。そのため、情報を入手するのに最適な場所です。

IDynamicObject をサポートするクラスを実装する最も簡単な方法は、 Microsoft.Scripting.Actions.Dynamicから派生させ、関連するメソッド (関数呼び出しのセマンティクスを実装する Call メソッドなど) をオーバーライドすることです。Microsoft.Scripting.Actions.Dynamic は CTP に含まれていないようですが、IronPython 2.0 のものは動作するようです。

「パラメーター」パラメーターの正確な意味についてはまだ不明ですが、動的オブジェクトのバインディングのコンテキストを提供しているようです。

于 2008-10-29T12:39:25.173 に答える
0

このプレゼンテーションでは、DLR に関する多くの情報も提供します。

于 2008-10-29T12:41:26.073 に答える