Reflection in .NET FrameworkReflection in the .NET Framework

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 valori.The classes in the System.Reflection namespace, together with System.Type, enable you to obtain information about loaded assemblies and the types defined within them, such as classes, interfaces, and value types. È anche possibile usare la reflection per creare istanze di tipi in fase di esecuzione, richiamarle e accedervi.You can also use reflection to create type instances at run time, and to invoke and access them. Per argomenti su aspetti specifici di reflection, vedere Argomenti correlati al termine di questa panoramica.For topics about specific aspects of reflection, see Related Topics at the end of this overview.

Il caricatore di Common Language Runtime gestisce i domini applicazioni, che costituiscono limiti definiti intorno a oggetti con lo stesso ambito di applicazione.The common language runtime loader manages application domains, which constitute defined boundaries around objects that have the same application scope. 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.This management includes loading each assembly into the appropriate application domain and controlling the memory layout of the type hierarchy within each assembly.

Gli assembly contengono moduli, i quali contengono tipi, che a loro volta contengono membri.Assemblies contain modules, modules contain types, and types contain members. La reflection fornisce oggetti che incapsulano assembly, moduli e tipi.Reflection provides objects that encapsulate assemblies, modules, and types. È possibile usare la reflection per creare in modo dinamico un'istanza di un tipo, associare il tipo a un oggetto esistente od ottenere il tipo da un oggetto esistente.You can use reflection to dynamically create an instance of a type, bind the type to an existing object, or get the type from an existing object. È quindi possibile richiamare i metodi del tipo o accedere ai relativi campi e proprietà.You can then invoke the type's methods or access its fields and properties. Gli impieghi tipici della reflection includono:Typical uses of reflection include the following:

  • L'uso 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.Use Assembly to define and load assemblies, load modules that are listed in the assembly manifest, and locate a type from this assembly and create an instance of it.

  • L'uso di Module per individuare informazioni riguardanti ad esempio l'assembly che contiene il modulo e le classi incluse nel modulo.Use Module to discover information such as the assembly that contains the module and the classes in the module. È anche possibile ottenere tutti i metodi globali o altri metodi specifici non globali definiti nel modulo.You can also get all global methods or other specific, nonglobal methods defined on the module.

  • L'uso 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.Use ConstructorInfo to discover information such as the name, parameters, access modifiers (such as public or private), and implementation details (such as abstract or virtual) of a constructor. L'uso del metodo GetConstructors o GetConstructor di un oggetto Type per richiamare un costruttore specifico.Use the GetConstructors or GetConstructor method of a Type to invoke a specific constructor.

  • L'uso 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.Use MethodInfo to discover information such as the name, return type, parameters, access modifiers (such as public or private), and implementation details (such as abstract or virtual) of a method. L'uso del metodo GetMethods o GetMethod di un oggetto Type per richiamare un metodo specifico.Use the GetMethods or GetMethod method of a Type to invoke a specific method.

  • L'uso 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.Use FieldInfo to discover information such as the name, access modifiers (such as public or private) and implementation details (such as static) of a field, and to get or set field values.

  • L'uso 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.Use EventInfo to discover information such as the name, event-handler data type, custom attributes, declaring type, and reflected type of an event, and to add or remove event handlers.

  • L'uso 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à.Use PropertyInfo to discover information such as the name, data type, declaring type, reflected type, and read-only or writable status of a property, and to get or set property values.

  • L'uso 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.Use ParameterInfo to discover information such as a parameter's name, data type, whether a parameter is an input or output parameter, and the position of the parameter in a method signature.

  • L'uso di CustomAttributeData per individuare informazioni sugli attributi personalizzati in caso di uso del contesto Reflection-Only di un dominio applicazione.Use CustomAttributeData to discover information about custom attributes when you are working in the reflection-only context of an application domain. CustomAttributeData consente di esaminare gli attributi senza crearne istanze.CustomAttributeData allows you to examine attributes without creating instances of them.

Le classi dello spazio dei nomi System.Reflection.Emit forniscono un tipo specializzato di reflection che consente di compilare tipi in fase di esecuzione.The classes of the System.Reflection.Emit namespace provide a specialized form of reflection that enables you to build types at run time.

La reflection può essere usata anche per creare applicazioni definite visualizzatori di tipi, che consentono agli utenti di selezionare i tipi e visualizzarne quindi le relative informazioni.Reflection can also be used to create applications called type browsers, which enable users to select types and then view the information about those types.

Esistono anche altri impieghi per la reflection.There are other uses for reflection. I compilatori di linguaggi come JScript usano la reflection per creare tabelle di simboli.Compilers for languages such as JScript use reflection to construct symbol tables. Le classi dello spazio dei nomi System.Runtime.Serialization usano la reflection per accedere ai dati e determinare quali campi rendere persistenti.The classes in the System.Runtime.Serialization namespace use reflection to access data and to determine which fields to persist. Le classi dello spazio dei nomi System.Runtime.Remoting usano la reflection in modo indiretto attraverso la serializzazione.The classes in the System.Runtime.Remoting namespace use reflection indirectly through serialization.

Tipi di runtime nella reflectionRuntime Types in Reflection

La reflection fornisce classi, ad esempio Type e MethodInfo, per rappresentare tipi, membri, parametri e altre entità di codice.Reflection provides classes, such as Type and MethodInfo, to represent types, members, parameters, and other code entities. Tuttavia, quando si usa la reflection non si opera direttamente su queste classi, la maggior parte delle quali è astratta (MustInherit in Visual Basic).However, when you use reflection you don't work directly with these classes, most of which are abstract (MustInherit in Visual Basic). Si opera invece con tipi fornito da Common Language Runtime (CLR).Instead, you work with types provided by the common language runtime (CLR).

Ad esempio, quando si usa l'operatore typeof di C# (GetType in Visual Basic) per ottenere un oggetto Type, l'oggetto è in realtà un RuntimeType.For example, when you use the C# typeof operator (GetType in Visual Basic) to obtain a Type object, the object is really a RuntimeType. RuntimeType deriva da Type e fornisce le implementazioni di tutti i metodi astratti.RuntimeType derives from Type, and provides implementations of all the abstract methods.

Queste classi runtime sono internal (Friend in Visual Basic).These runtime classes are internal (Friend in Visual Basic). Non sono documentate separatamente rispetto alle relative classi base, poiché il loro comportamento è descritto nella documentazione della classe base.They are not documented separately from their base classes, because their behavior is described by the base class documentation.

TitoloTitle DescrizioneDescription
Visualizzazione delle informazioni sul tipoViewing Type Information Viene illustrata la classe Type e vengono forniti esempi di codice in cui viene descritto l'uso di Type con diverse classi di reflection per ottenere informazioni su costruttori, metodi, campi, proprietà ed eventi.Describes the Type class and provides code examples that illustrate how to use Type with several reflection classes to obtain information about constructors, methods, fields, properties, and events.
Reflection e tipi genericiReflection and Generic Types Vengono illustrate le modalità con cui la reflection gestisce i parametri e gli argomenti tipo di metodi e tipi generici.Explains how reflection handles the type parameters and type arguments of generic types and generic methods.
Security Considerations for Reflection (Considerazioni sulla sicurezza per reflection)Security Considerations for Reflection Vengono illustrate le regole che determinano in che misura è possibile usare la reflection per recuperare informazioni sui tipi e accedere a essi.Describes the rules that determine to what degree reflection can be used to discover type information and access types.
Dynamically Loading and Using Types (Caricamento e uso dinamico dei tipi)Dynamically Loading and Using Types Viene illustrata l'interfaccia di associazione personalizzata della reflection che supporta l'associazione tardiva.Describes the reflection custom-binding interface that supports late binding.
Procedura: Caricare assembly nel contesto Reflection-OnlyHow to: Load Assemblies into the Reflection-Only Context Viene descritto il contesto di caricamento Reflection-Only.Describes the reflection-only load context. Viene illustrato come caricare un assembly, verificare il contesto ed esaminare gli attributi applicati a un assembly nel contesto Reflection-Only.Shows how to load an assembly, how to test the context, and how to examine attributes applied to an assembly in the reflection-only context.
Accessing Custom Attributes (Accesso agli attributi personalizzati)Accessing Custom Attributes Viene illustrato l'uso della reflection per ottenere informazioni sull'esistenza degli attributi e sui relativi valori.Demonstrates using reflection to query attribute existence and values.
Specifying Fully Qualified Type Names (Specifica di nomi di tipo completi)Specifying Fully Qualified Type Names Vengono illustrati il formato dei nomi di tipo completi, secondo la notazione BNF (Backus-Naur Form), e la sintassi richiesta per specificare nomi di assembly, puntatori, riferimenti, matrici e caratteri speciali.Describes the format of fully qualified type names in terms of the Backus-Naur form (BNF), and the syntax required for specifying special characters, assembly names, pointers, references, and arrays.
How to: Hook Up a Delegate Using Reflection (Procedura: Associare un delegato tramite reflection)How to: Hook Up a Delegate Using Reflection Viene illustrato come creare un delegato per un metodo e associarlo a un evento.Explains how to create a delegate for a method and hook the delegate up to an event. Viene illustrato come creare un metodo di gestione degli eventi in fase di esecuzione usando DynamicMethod.Explains how to create an event-handling method at run time using DynamicMethod.
Creazione di assembly e metodi dinamiciEmitting Dynamic Methods and Assemblies Viene illustrato come generare assembly e metodi generici.Explains how to generate dynamic assemblies and dynamic methods.

RiferimentiReference

System.Type

System.Reflection

System.Reflection.Emit