Reflection (Guida per programmatori C#)
Aggiornamento: novembre 2007
La reflection fornisce oggetti (di tipo Type) che descrivono 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, nonché richiamarne i metodi o accedere ai campi e alle proprietà dell'oggetto. La reflection consente inoltre di accedere agli eventuali attributi utilizzati nel codice. Per ulteriori informazioni, vedere la classe Attributi (Guida per programmatori C#).
Di seguito viene riportato un esempio di reflection che utilizza il metodo statico GetType, ereditato da tutti i tipi dalla classe base Object, per ottenere il tipo di una variabile:
// Using GetType to obtain type information:
int i = 42;
System.Type type = i.GetType();
System.Console.WriteLine(type);
L'output è il seguente:
System.Int32
In questo esempio viene utilizzata la reflection per ottenere il nome completo di un assembly caricato:
// Using Reflection to get information from an Assembly:
System.Reflection.Assembly o = System.Reflection.Assembly.Load("mscorlib.dll");
System.Console.WriteLine(o.GetName());
L'output è il seguente:
mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Nota: |
---|
Le parole chiave di C# protected e internal non hanno significato in IL e non sono utilizzate dalle API Reflection. I termini corrispondenti in IL sono Family e Assembly. Per identificare un metodo internal tramite reflection, utilizzare la proprietà IsAssembly. Per identificare un metodo protected internal, utilizzare la proprietà IsFamilyOrAssembly. |
Cenni preliminari sulla reflection
La reflection può essere utile nelle seguenti situazioni:
Quando è necessario accedere agli attributi nei metadati di un programma. Vedere l'argomento Accesso agli attributi mediante reflection.
Per esaminare e creare istanze di tipi in un assembly.
Per compilare nuovi tipi in fase di esecuzione. Utilizzare le classi in System.Reflection.Emit.
Per eseguire associazioni tardive, accedere a metodi su tipi creati in fase di esecuzione. Vedere l'argomento Caricamento e utilizzo dinamico dei tipi.
Sezioni correlate
Ulteriori informazioni:
Specifiche del linguaggio C#
Per ulteriori informazioni, vedere le seguenti sezioni incluse in Specifiche del linguaggio C#:
1.12 Attributi
7.5.11 Operatore typeof
Vedere anche
Concetti
Riferimenti
Domini applicazione (Guida per programmatori C#)
Assembly e Global Assembly Cache (Guida per programmatori C#)