Wird C # 4.0 dynamische Objekte haben eine Anlage für Ente eingeben?
-
06-07-2019 - |
Frage
In C # 4.0 werden wir dynamische Typen bekommen, oder Objekte, deren „statischen Typ ist dynamisch“, so Anders. Dies ermöglicht es jeder Methodenaufruf Auflösung zur Laufzeit geschehen, anstatt Zeit zu kompilieren. Aber wird es Möglichkeit, das dynamische Objekt zu irgendeiner Art von Vertrag zu binden (und damit auch die volle IntelliSense für ihn zurückzubekommen), anstatt jeden Anruf so dass auf sie, auch wenn Sie wissen, dass es unwahrscheinlich ist, um gültig sein.
d. statt nur
dynamic foo = GetSomeDynamicObject();
haben die Fähigkeit, es zu werfen oder zu transformieren sie in einen bekannten Vertrag zu beschränken, wie
IFoo foo2 = foo.To<IFoo>;
oder auch nur
IFoo foo2 = foo as IFoo;
Kann nicht so etwas in den bestehenden Materialien für C # 4.0 finden, aber es scheint wie eine logische Erweiterung des dynamischen Paradigmas. Jeder, der weitere Informationen?
Lösung
Ich bin mir nicht bewusst, etwas wirklich Duck Typing ähnlich, ich habe Angst. Ich habe über die Idee gebloggt, aber ich erwarte keine Unterstützung. Es wäre wahrscheinlich nicht zu hart sein Reflection.Emit zu verwenden, um eine Klasse zu machen, die eine Implementierung einer bestimmten Schnittstelle generieren, ein dynamisches Objekt im Konstruktor zu nehmen und Proxying nur jeden Anruf durch zu. Nicht ideal, aber es könnte eine Notlösung sein.
Andere Tipps
Das ist eine coole Idee. Wenn ich Sie verstehen, Sie beschreiben / eine Fähigkeit des CLR vorschlägt, wobei, wenn Sie versuchen und werfen ein dynamisches Objekt an eine Schnittstelle, es an, welche Methoden / Eigenschaften der dynamischen Objektträger aussehen sollte und sehen, ob es diejenigen hat, die effektiv diese Schnittstelle implementieren. Dann würde die CLR kümmern ‚zur Durchführung IFoo‘ auf das Objekt, so können Sie werfen dann das dynamische Objekt zu einem IFoo. So gut wie sicher, dass das nicht unterstützt werden, aber es ist eine interessante Idee.