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?

È stato utile?

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.

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