Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Le classi nello spazio dei System.Reflection nomi, insieme a System.Type, consentono di ottenere informazioni sugli assembly caricati e sui tipi definiti all'interno di essi, ad esempio classi, interfacce e tipi di valore, ovvero strutture ed enumerazioni. È anche possibile usare la reflection per creare istanze di tipo in fase di esecuzione e per richiamarle e accedervi.
Gli assembly contengono moduli, moduli contenenti tipi e tipi contengono membri. Reflection fornisce oggetti che incapsulano assembly, moduli e tipi. È possibile usare la reflection per creare dinamicamente 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 accedervi a campi e proprietà. Gli usi tipici della riflessione includono quanto segue:
- Usare Assembly per definire e caricare gli assembly, caricare i moduli elencati nel manifesto dell'assembly, individuare un tipo da questo assembly e crearne un'istanza.
- Usare Module per individuare informazioni quali l'assembly che contiene il modulo e le classi nel modulo. È anche possibile ottenere tutti i metodi globali o altri metodi specifici non globali definiti nel modulo.
- Usare ConstructorInfo per individuare informazioni quali il nome, i parametri, i modificatori di accesso (ad esempio
public
oprivate
) e i dettagli di implementazione (ad esempioabstract
ovirtual
) di un costruttore. Utilizzare il metodo GetConstructors o GetConstructor di un Type per richiamare un costruttore specifico. - Usare MethodInfo per individuare informazioni quali il nome, il tipo restituito, i parametri, i modificatori di accesso e i dettagli di implementazione (ad esempio
abstract
ovirtual
) di un metodo. Utilizzare il GetMethods o il GetMethod di un Type per invocare un metodo specifico. - Usare FieldInfo per individuare informazioni quali il nome, i modificatori di accesso e i dettagli di implementazione (ad esempio
static
) di un campo e per ottenere o impostare i valori dei campi. - Usare EventInfo per individuare informazioni quali il nome, il tipo di dati del gestore eventi, gli attributi personalizzati, il tipo dichiarante e il tipo riflesso di un evento e aggiungere o rimuovere gestori eventi.
- Usare PropertyInfo per individuare informazioni quali il nome, il tipo di dati, il tipo dichiarante, il tipo riflesso e lo stato di sola lettura o scrivibile di una proprietà e per ottenere o impostare i valori delle proprietà.
- Usare ParameterInfo per individuare informazioni quali il nome di un parametro, il tipo di dati, se un parametro è un parametro di input o di output e la posizione del parametro in una firma del metodo.
- Usa CustomAttributeData per scoprire informazioni sugli attributi personalizzati quando lavori nel contesto di sola lettura o reflection-only (.NET Framework). CustomAttributeData consente di esaminare gli attributi senza crearne istanze.
Le classi dello System.Reflection.Emit spazio dei nomi forniscono una forma specializzata di reflection che consente di creare tipi in fase di esecuzione.
La riflessione può essere utilizzata anche per creare browser di tipi, che permettono agli utenti di selezionare i tipi e di visualizzare le relative informazioni.
Esistono altri usi per la riflessione. I compilatori per linguaggi come JScript usano la reflection per costruire tabelle di simboli. Le classi nello System.Runtime.Serialization spazio dei nomi usano la reflection per accedere ai dati e per determinare quali campi rendere persistenti. Le classi nello spazio dei nomi System.Runtime.Remoting usano la reflection indirettamente tramite la serializzazione.
Tipi di runtime nella riflessione
La reflection fornisce classi, ad esempio Type e MethodInfo, per rappresentare tipi, membri, parametri e altre entità di codice. Tuttavia, quando si usa la reflection, non si lavora direttamente con queste classi, la maggior parte delle quali sono astratte (MustInherit
in Visual Basic). Al contrario, si lavora con i tipi forniti da Common Language Runtime (CLR).
Ad esempio, quando si usa l'operatore C# typeof
(GetType
in Visual Basic) per ottenere un Type oggetto , l'oggetto è effettivamente un RuntimeType
oggetto .
RuntimeType
deriva da Type e fornisce implementazioni di tutti i metodi astratti.
Queste classi di runtime sono internal
(Friend
in Visual Basic). Non sono documentate separatamente dalle relative classi di base, perché il loro comportamento è descritto dalla documentazione della classe di base.