Domanda

Di recente ho partecipato a Code Camp 12 e un relatore ha affermato che la nuova parola chiave dynamic in C # 4.0 dovrebbe essere utilizzata solo per l'interruzione con le lingue dinamiche. Penso che abbia anche detto che è un po 'lento, rispetto alla normale riflessione (che a sua volta è un po' lenta).

Ma poi ho sentito Scott Hanselman menzionare che la parola chiave dinamica "rende meno dolorosa la riflessione".

Quindi sarà accettabile usare la parola chiave dinamica allo scopo di riflettere un oggetto che non proviene dal codice dinamico?

È stato utile?

Soluzione

Direi "no", ma non iniziare a usarlo follemente. In realtà, dinamico è, da quello che ho confrontato, più veloce della riflessione di base, poiché mantiene i delegati (piuttosto che usare la riflessione Invoke tutto il tempo). In particolare, due punti di forza sono:

  • chiamare in metodi generici ( MakeGenericMethod ecc. è così doloroso)
  • operatori di chiamata

Tuttavia, ci sono modi per fare ciò di cui hai bisogno con le interfacce ecc .; dinamico su un tipo non dinamico equivale in realtà alla tipizzazione anatra. Ciò è utile in una serie di scenari molto limitati ; principalmente: le interfacce sarebbero preferite. Non escluderli.

Il rovescio della medaglia di dinamico è che per essere utile (senza scrivere codice folle) è necessario conoscere i nomi in fase di compilazione; che spesso non è il caso, o non saremmo in questo sottaceto! Quando conosci solo il nome in fase di esecuzione, ci sono altre opzioni ( Expression , Delegate.CreateDelegate , " HyperDescriptor " ;, DynamicMethod , ecc.) di accesso ai dati in modo rapido.

Altri suggerimenti

Se ritieni di aver bisogno di digitare l'anatra e non hai davvero bisogno della sicurezza del tipo di tempo di compilazione, vai avanti e usa la dinamica. Sono sicuro che ci saranno una serie di nuovi utilizzi per la sua comparsa nel solo codice C # (come la query di un'origine dati dinamica come XML utilizzando ExpandoObject). Sono altrettanto sicuro che un gran numero di nuovi utilizzi sarà superfluo allo stesso modo in cui un ampio uso dei generici è solo un modo più complesso di esprimere il polimorfismo.

Per quanto riguarda le prestazioni, il DLR in .NET 4 sta tentando di rendere la digitazione dinamica "veloce". Come sempre, se è abbastanza veloce è qualcosa che capirai quando inizi a creare il profilo della tua applicazione.

Da quello che so, il motivo principale per cui la parola chiave dynamic è stata introdotta in C # è stato quello di facilitare l'interoperabilità con gli oggetti COM. Ma ovviamente, può essere usato per la riflessione ...

Bene, la risposta è che la parola chiave dinamica è per l'interoperabilità, ma non solo per l'interoperabilità delle lingue dinamiche. L'interoperabilità COM è solo un esempio. Il team C # ha già modificato l'interoperabilità COM per utilizzare questa funzione e questo ha reso l'interoperabilità molto più semplice. Recentemente ho visto che ASP.NET MVC Views sta facendo qualcosa di simile.

Ho anche pubblicato un esempio che mostra un altro caso d'uso per la parola chiave dinamica: Dinamico in C # 4.0: creazione di wrapper con DynamicObject . Questi sono esattamente i tipi di esempi di cui parlava Freed: semplificare l'interoperabilità con i dati XML.

Dovrei dire "No". Dai un'occhiata a http://haacked.com/ archive / 2009/08/26 / method-missing-csharp-4.aspx per un esempio di un utilizzo meno previsto.

La parola chiave dinamica aveva chiaramente lo scopo di rendere molto più facile lavorare con COM e linguaggi dinamici, ma ciò non significa che dovremmo limitarla a quelle aree. Per quanto riguarda le prestazioni: tienilo a mente, ma non concentrarti su di esso fino a quando non hai un problema di prestazioni. (Questo è uno di quei dettagli di livello inferiore che è improbabile che influenzi le scelte di progettazione di alto livello che possono compromettere le prestazioni prima ancora di iniziare.)

Modifica

Inoltre, qualsiasi buon designer di lingue è consapevole del fatto che le persone useranno le funzionalità del linguaggio in modi inaspettati. Ciò è particolarmente rilevante per questa discussione, perché hanno creato un'interfaccia che abilita il comportamento dinamico. Hanno intenzionalmente permesso alle persone di agganciare praticamente qualsiasi cosa alla "dinamica" capacità delle parole chiave.

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