Share via


Cenni preliminari su reflection

Aggiornamento: novembre 2007

Il caricatore Common Language Runtime gestisce i domini applicazione, ovvero limiti definiti costituiti intorno a oggetti aventi lo stesso ambito di 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, che contengono tipi, che a loro volta 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 gli assembly, per caricare i moduli elencati nel manifesto dell'assembly e per individuare un tipo di tale assembly e crearne un'istanza.

  • L'utilizzo di Module per individuare informazioni riguardanti ad esempio l'assembly che contiene il modulo e le classi incluse nel modulo. È anche possibile ottenere tutti i metodi globali o altri metodi specifici non globali definiti nel modulo.

  • L'utilizzo di ConstructorInfo per individuare informazioni quali nome, parametri, modificatori di accesso, ad esempio public o private), e dettagli relativi all'implementazione, ad esempio abstract o virtual, di un costruttore. L'utilizzo del metodo GetConstructors o GetConstructor di un oggetto Type per richiamare un costruttore specifico.

  • L'utilizzo di MethodInfo per individuare informazioni quali nome, tipo restituito, parametri, modificatori di accesso, ad esempio public o private, e dettagli relativi all'implementazione, ad esempio abstract o virtual, di un metodo. L'utilizzo del metodo GetMethods o GetMethod di un oggetto Type per richiamare un metodo specifico.

  • L'utilizzo di FieldInfo per individuare informazioni quali nome, modificatori di accesso, ad esempio public o private, e dettagli relativi all'implementazione, ad esempio static, di un campo nonché per ottenere o impostare i valori dei campi.

  • L'utilizzo di EventInfo per individuare informazioni quali nome, tipo di dati del gestore eventi, attributi personalizzati, tipo dichiarante e tipo riflesso di un evento, nonché per aggiungere o rimuovere i gestori eventi.

  • L'utilizzo di PropertyInfo per ottenere informazioni quali nome, tipo di dati, tipo dichiarante, tipo riflesso e stato modificabile o di sola lettura di una proprietà nonché 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.

  • L'utilizzo di CustomAttributeData per ottenere informazioni sugli attributi personalizzati quando si lavora nel contesto di sola reflection di un dominio applicazione. CustomAttributeData consente di esaminare gli attributi senza crearne istanze.

Le classi dello spazio dei nomi System.Reflection.Emit forniscono un tipo specializzato di reflection che consente di compilare 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

Riferimenti

Spazi dei nomi di reflection

System.Reflection.Emit

Altre risorse

Reflection

Creazione di assembly e metodi dinamici