Qual è l'uso pratico di & # 8220; dynamic & # 8221; variabile in C # 4.0?
Domanda
A cosa servono se quando chiami il metodo, potrebbe non esistere?
Significa che saresti in grado di creare dinamicamente un metodo su un oggetto dinamico?
Qual è l'uso pratico di questo?
Soluzione
Non sarai davvero in grado di creare dinamicamente il metodo, ma puoi ottenere un'implementazione di IDynamicMetaObject
(spesso estendendo DynamicObject
) per rispondere come se il metodo esistesse .
Utilizza:
- Programmazione su oggetti COM con un'API debole (ad es. ufficio)
- Chiamata in linguaggi dinamici come Ruby / Python
- Potenzialmente "esplorabile" oggetti: immagina una query simile a XPath ma tramite un metodo / proprietà chiama ad es.
document.RootElement.Person [5] .Name [" Abilità "]
- Senza dubbio molti altri dobbiamo ancora pensare a :)
Altri suggerimenti
Prima di tutto, non puoi usarlo ora. Fa parte di C # 4, che uscirà qualche volta in futuro.
Fondamentalmente, è per un oggetto, le cui proprietà non saranno note fino al runtime. Forse viene da un oggetto COM. Forse è un oggetto "definito al volo" come descrivi (anche se non credo che ci sia una possibilità per crearli ancora o pianificati).
È un po 'come un System.Object, tranne per il fatto che ti è permesso chiamare metodi che il compilatore non conosce e che il runtime capisce come chiamare.
I due biggies a cui riesco a pensare sono la tipizzazione anatra e la capacità di usare C # come linguaggio di scripting nelle applicazioni, simile a JavaScript e Python . Quest'ultimo mi fa strappare un po '.
Pensala come una forma semplificata di Riflessione. Invece di questo:
object value = GetSomeObject();
Method method = value.GetType().GetMethod("DoSomething");
method.Invoke(value, new object[] { 1, 2, 3 });
Ottieni questo:
IDynamicObject value = GetSomeObject();
value.DoSomething(1, 2, 3);
Vedo che sono stati scritti diversi framework ORM dinamici. O diamine scrivine uno tu.
Sono d'accordo con Jon Skeet, potresti vedere alcuni modi interessanti di esplorare gli oggetti. Forse con selettori come jQuery.
Chiamata COM e chiamata Lingue dinamiche.
Non vedo l'ora di vedere se esiste un modo per eseguire un metodo missing_come Ruby.