Cenni preliminari sulla reflection

Il caricatore di Common Language Runtime gestisce i domini applicazione. La gestione include il caricamento di ciascun assembly nel dominio applicazione appropriato e il controllo della disposizione in memoria della gerarchia dei tipi di ciascun assembly.

Gli assembly contengono moduli, i moduli contengono tipi e i tipi contengono membri. La reflection fornisce oggetti che incapsulano assembly, moduli e tipi. È possibile utilizzare la reflection per creare in modo dinamico un'istanza di un tipo, associare il tipo a un oggetto esistente o ottenere il tipo da un oggetto esistente. È quindi possibile richiamare i metodi del tipo o accedere ai relativi campi e proprietà. Gli utilizzi tipici della reflection includono:

  • L'utilizzo di Assembly per definire e caricare un assembly, caricare i moduli elencati nel manifesto dell'assembly e individuare un tipo dell'assembly e crearne un'istanza.
  • L'utilizzo di Module per individuare informazioni quali l'assembly che contiene il modulo e le classi del modulo. È anche possibile ottenere tutti i metodi globali o altri metodi specifici non globali definiti nel modulo.
  • L'utilizzo di ConstructorInfo per ottenere informazioni quali nome, parametri, modificatori di accesso (quali public o private) e dettagli sull'implementazione (ad esempio abstract o virtual) di un costruttore. Per richiamare un costruttore specifico, utilizzare il metodo GetConstructors o GetConstructor di un oggetto Type.
  • L'utilizzo di MethodInfo per ottenere informazioni quali nome, tipo restituito, parametri, modificatori di accesso (quali public o private) e dettagli sull'implementazione (ad esempio abstract o virtual) di un metodo. Per richiamare un metodo specifico, utilizzare il metodo GetMethods o GetMethod di un oggetto Type.
  • L'utilizzo di FieldInfo per ottenere informazioni quali nome, modificatori di accesso (quali public o private) e dettagli sull'implementazione (ad esempio static) di un campo e per ottenere o impostare i valori del campo.
  • L'utilizzo di EventInfo per ottenere informazioni quali nome, tipo di dati del gestore eventi, attributi personalizzati, tipo di dichiarazione e tipo riflesso di un evento e per aggiungere o rimuovere gestori eventi.
  • L'utilizzo di PropertyInfo per ottenere informazioni quali nome, tipo di dati, tipo di dichiarazione, tipo riflesso e stato modificabile o di sola lettura di una proprietà e per ottenere o impostare i valori della proprietà.
  • L'utilizzo di ParameterInfo per ottenere informazioni quali nome di un parametro, tipo di dati, tipo di parametro (se di input o di output) e posizione del parametro in una firma di un metodo.

Le classi dello spazio dei nomi System.Reflection.Emit forniscono un tipo specializzato di reflection che consente di generare tipi in fase di esecuzione.

La reflection può essere utilizzata anche per creare applicazioni definite visualizzatori di tipi, che consentono agli utenti di selezionare i tipi e visualizzarne quindi le relative informazioni.

Esistono anche altri utilizzi della reflection. I compilatori di linguaggi come JScript utilizzano la reflection per creare tabelle di simboli. Le classi dello spazio dei nomi System.Runtime.Serialization utilizzano la reflection per accedere ai dati e determinare quali campi rendere persistenti. Le classi dello spazio dei nomi System.Runtime.Remoting utilizzano la reflection in modo indiretto attraverso la serializzazione.

Vedere anche

Individuazione delle informazioni sul tipo in fase di esecuzione | Spazio dei nomi Reflection | System.Reflection.Emit