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?

È stato utile?

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.

Tobias Hertkorn ha risposto alla mia domanda qui con un link al suo blogpost che mostra un esempio di come utilizzare il metodo Convert () su MetaObject per restituire un proxy dinamico. Sembra molto promettente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top