Frage

Um "Methode fehlende" -semantics zu implementieren und so in C # 4.0, haben Sie IDynamicObject zu implementieren:

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

Soweit ich herausfinden kann, IDynamicObject ist eigentlich ein Teil des DLR, so ist es nicht neu. Aber ich habe nicht in der Lage gewesen, auf es viel Dokumentation zu finden.

Es gibt einige sehr einfache Beispielimplementierungen gibt (fx hier und hier ), aber könnte jemand mich zu einer vollständigeren Implementierungen oder einige echte Dokumentation verweisen?

Vor allem, wie genau soll man den "Parameter" -Parameter behandeln?

War es hilfreich?

Lösung

Die kurze Antwort ist, dass das Metaobjekt ist, was tatsächlich verantwortlich ist für den Code zu erzeugen, die an der Aufrufstelle ausgeführt werden. Der Mechanismus, der es für diese verwendet, ist LINQ Ausdruck Bäume, die im DLR wurden erweitert. Anstatt also mit einem Objekt zu starten, beginnt es mit einem Ausdruck, der das Objekt darstellt, und letztlich muß es geht um einen Ausdruck Baum zurückzukehren, dass die Maßnahmen ergriffen werden, beschreibt.

Wenn Sie mit diesem zu spielen, denken Sie bitte daran, dass die Version von System.Core im CTP von einem Snapshot am Ende August genommen wurde. Es entspricht nicht sehr sauber auf eine bestimmte Beta-Version von Ironpython. Eine Reihe von Änderungen wurde seitdem zum DLR gemacht.

Auch für die Kompatibilität mit der CLR v2 System.Core, Versionen von Ironpython beginnend mit entweder Beta 4 oder 5 Beta jetzt alles umbenennen, dass im System-Namespace ist stattdessen in dem Microsoft-Namensraum zu sein.

Andere Tipps

Wenn Sie ein Ende Probe einschließlich Quellcode zu beenden, in einem dynamischen Objekt führt, den Wert für beliebige Eigenschaften in einem Wörterbuch speichert dann meinen Beitrag" Ein ersten Blick Duck Typing in C # 4.0" könnte das richtige für Sie. Ich schrieb, dass Post zu zeigen, wie dynamisches Objekt kann statisch typisierte Schnittstellen gegossen werden. Er hat eine komplette Arbeits Umsetzung einer Ente, die ein IDynamicObject und kann wirkt wie ein IQuack ist.

Wenn Sie weitere Informationen brauchen, um mich auf meinem Blog kontaktieren und ich werde Sie zusammen helfen, so gut wie ich kann.

ich gebloggt nur darüber, wie dies zu tun hier:

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

Hier ist, was ich bisher herausgefunden:

Die Dynamic Language Runtime wird zur Zeit im Rahmen der Ironpython Projekt gehalten. Also das ist der beste Ort, um Informationen zu gehen.

Der einfachste Weg, um eine Klasse zu implementieren Unterstützung IDynamicObject zu sein scheint von Microsoft.Scripting.Actions.Dynamic und überschreibt die entsprechenden Methoden, zum Beispiel der Call-Methode Funktionsaufruf Semantik zu implementieren. Es sieht aus wie Microsoft.Scripting.Actions.Dynamic nicht in der CTP aufgenommen worden, aber die man von Ironpython 2.0 sieht aus wie es funktionieren wird.

Ich bin immer noch unklar, über die genaue Bedeutung des „Parameter“ -Parameter, aber es scheint Kontext für die Bindung des dynamischen Objekts zu schaffen.

Diese Präsentation bietet auch eine Menge Informationen über das DLR:

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top