Frage

I IDynamicObject in C # 4, Rückkehr eine benutzerdefinierte metaObject Unterklasse implementiert haben, das tut einfache Eigenschaft Getter / Setter Versand an ein Wörterbuch. Kein Hexenwerk.

Wenn ich dies tun:

dynamic foo = new DynamicFoo();

foo.Name = "Joe";

foo.Name = "Fred";

Console.WriteLine(foo.Name);

Dann ‚Joe‘ ist an die Konsole ausgegeben ... der zweite Aufruf den Setter ‚Namen‘ wird nie aufgerufen (Schritte nie in meinen benutzerdefinierten Dispatcher-Code überhaupt).

weiß, dass ich die DLR callsite Caching tut, aber ich davon aus, dass würde hier nicht gelten. Wer weiß, was los ist?

War es hilfreich?

Lösung

Wie auch immer metaObject Sie Rückkehr aus (Bind) setMember wird zwischengespeichert und in diesem Fall wiederverwendet werden. Sie haben zwei dynamische Websites Sätze zu tun. Der erste Anruf wird das Ergebnis in einem L2-Cache zwischenspeichern, die die zweite Stelle abholen, bevor Sie fragen, um eine neue Regel zu erzeugen.

Also, was metaObject Sie Bedürfnisse sind Rückkehr einen Ausdruck Baum umfassen, die den Wert aktualisiert. Zum Beispiel sollte es so etwas wie:

return new metaObject (     Expression.AssignProperty (this.Expression, value.Expression),     Restrictions.TypeRestriction (this.Expression, this.Value.GetType ());

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