Gli oggetti dinamici C # 4.0 avranno qualche possibilità di scrivere anatre?
-
06-07-2019 - |
Domanda
In C # 4.0 otterremo tipi dinamici, o oggetti il ??cui tipo "statico è dinamico", secondo Anders. Ciò consentirà qualsiasi risoluzione di invocazione del metodo in fase di esecuzione anziché durante la compilazione. Ma ci sarà la possibilità di vincolare l'oggetto dinamico a una sorta di contratto (e quindi anche ottenere la piena intelligenza per farlo tornare), piuttosto che consentire qualsiasi chiamata su di esso anche se sai che non è probabile che sia valido.
vale a dire. anziché solo
dynamic foo = GetSomeDynamicObject();
ha la capacità di lanciarlo o trasformarlo per vincolarlo a un contratto noto, come
IFoo foo2 = foo.To<IFoo>;
o anche solo
IFoo foo2 = foo as IFoo;
Non riesco a trovare nulla del genere nei materiali esistenti per C # 4.0, ma sembra un'estensione logica del paradigma dinamico. Qualcuno con più informazioni?
Soluzione
Non sono a conoscenza di qualcosa che assomigli davvero alla tipizzazione delle anatre, temo. Ho ha scritto un blog sull'idea , ma non mi aspetto alcun supporto. Probabilmente non sarebbe troppo difficile usare Reflection.Emit per creare una classe che genererà un'implementazione di una data interfaccia, prendendo un oggetto dinamico nel costruttore e semplicemente eseguendo il proxy di ogni chiamata. Non è l'ideale, ma potrebbe essere un punto fermo.
Altri suggerimenti
È una bella idea. Se ti capisco, stai descrivendo / proponendo una capacità del CLR, per cui, quando provi a trasmettere un oggetto dinamico a un'interfaccia, dovrebbe guardare quali metodi / proprietà supporta l'oggetto dinamico e vedere se ne ha implementare efficacemente tale interfaccia. Quindi il CLR si occuperebbe di "implementare IFoo" sull'oggetto, in modo da poter poi lanciare l'oggetto dinamico su un IFoo. Quasi certo che non sarà supportato, ma è un'idea interessante.