Reflection
Le classi nello spazio dei nomi System.Reflection, insieme a System.Type, consentono di ottenere informazioni sugli assembly caricati e sui tipi in essi definiti, ad esempio classi, interfacce e tipi di valore. È anche possibile utilizzare la reflection per creare istanze di tipi in fase di esecuzione, richiamarle e accedervi. Per argomenti su aspetti specifici della reflection, vedere Argomenti correlati al termine di questa panoramica.
Il caricatore di Common Language Runtime gestisce i domini applicazione, che costituiscono limiti definiti intorno a oggetti con 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 il nome, i parametri, i modificatori di accesso (ad esempio public o private) e i dettagli di 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 il nome, il tipo restituito, i parametri, i modificatori di accesso (ad esempio public o private) e i dettagli di 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 il nome, i modificatori di accesso (ad esempio public o private) e i dettagli di 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 individuare informazioni sugli attributi personalizzati in caso di utilizzo del contesto ReflectionOnly 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.
Argomenti correlati
Titolo |
Descrizione |
---|---|
Vengono descritti i tipi interni, ad esempio RuntimeType, che ereditano le classi astratte nello spazio dei nomi System.Reflection e ne forniscono gran parte dell'implementazione. |
|
Viene illustrata la classe Type e vengono forniti esempi di codice in cui viene descritto come utilizzare Type con diverse classi di reflection per ottenere informazioni su costruttori, metodi, campi, proprietà ed eventi. |
|
Viene illustrata la modalità con cui la reflection gestisce i parametri e gli argomenti di tipo di metodi e tipi generici. |
|
Modelli di progettazione utilizzati dalle classi di reflection |
Viene fornita una tabella in cui si illustra il modello di denominazione dei metodi e l'utilizzo delle classi di reflection più comuni, quali ad esempio Module, Type e MemberInfo. |
Vengono illustrate le regole che determinano in che misura è possibile utilizzare la reflection per recuperare informazioni sui tipi e accedere ai tipi. |
|
Viene illustrata l'interfaccia di associazione personalizzata della reflection che supporta l'associazione tardiva. |
|
Viene descritto il contesto di caricamento Reflection-Only. Viene illustrato come caricare un assembly, verificare il contesto ed esaminare gli attributi applicati a un assembly nel contesto Reflection-Only. |
|
Viene illustrato come utilizzare la reflection per accedere ai membri predefiniti di una classe. |
|
Viene illustrato come utilizzare la reflection per accedere agli argomenti che dispongono di valori predefiniti e come richiamare i metodi che presentano argomenti con valori predefiniti. |
|
Viene illustrato l'utilizzo della reflection per ottenere informazioni sull'esistenza degli attributi e sui relativi valori. |
|
Vengono illustrati il formato dei nomi di tipo completi, secondo i canoni BNF (Backus-Naur Form), e la sintassi richiesta per specificare nomi di assembly, puntatori, riferimenti, matrici e caratteri speciali. |
|
Viene indicato dove si trovano le informazioni sull'utilizzo della reflection non gestita per l'esame dei metadati. |
|
Viene illustrato come creare un delegato per un metodo e associarlo a un evento. Viene illustrato come creare un metodo di gestione degli eventi in fase di esecuzione utilizzando DynamicMethod. |
|
Viene illustrato come generare assembly e metodi generici. |
Riferimenti
Torna all'inizio