Reflexão no .NET FrameworkReflection in the .NET Framework

As classes no namespace System.Reflection, juntamente com System.Type permitem que você obtenha informações sobre os assemblies carregados e os tipos definidos neles, como classes, interfaces e tipos de valor.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. Você também pode usar a reflexão para criar instâncias de tipo em tempo de execução e para invocá-los e acessá-los.You can also use reflection to create type instances at run time, and to invoke and access them. Para tópicos sobre aspectos específicos da reflexão, consulte Tópicos relacionados no final dessa visão geral.For topics about specific aspects of reflection, see Related Topics at the end of this overview.

O carregador Common Language Runtime gerencia os domínios do aplicativo, que constituem limites definidos em torno de objetos que têm o mesmo escopo de aplicativo.The common language runtime loader manages application domains, which constitute defined boundaries around objects that have the same application scope. Esse gerenciamento inclui carregar cada assembly no domínio do aplicativo apropriado e controlar o layout da memória da hierarquia de tipo em cada assembly.This management includes loading each assembly into the appropriate application domain and controlling the memory layout of the type hierarchy within each assembly.

Os assemblies contêm módulos, os módulos contêm tipos e tipos contêm membros.Assemblies contain modules, modules contain types, and types contain members. A reflexão fornece objetos que encapsulam assemblies, módulos e tipos.Reflection provides objects that encapsulate assemblies, modules, and types. É possível usar a reflexão para criar dinamicamente uma instância de um tipo, associar o tipo a um objeto existente ou obter o tipo de um objeto existente.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. Você pode então invocar os métodos do tipo ou acessar suas propriedades e campos.You can then invoke the type's methods or access its fields and properties. Usos típicos da reflexão incluem o seguinte:Typical uses of reflection include the following:

  • Use Assembly para definir e carregar assemblies, carregar módulos que estão listados no manifesto do assembly e localizar um tipo nesse assembly e criar uma instância dela.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.

  • Use Module para descobrir informações como o assembly que contém o módulo e as classes no módulo.Use Module to discover information such as the assembly that contains the module and the classes in the module. Você também pode obter todos os métodos globais ou outros métodos específicos e não globais definidos no módulo.You can also get all global methods or other specific, nonglobal methods defined on the module.

  • Use ConstructorInfo para descobrir informações como o nome, os parâmetros, os modificadores de acesso (como public ou private) e os detalhes de implementação (como abstract ou virtual) de um construtor.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. Use o método GetConstructors ou o GetConstructor de um Type para invocar um construtor específico.Use the GetConstructors or GetConstructor method of a Type to invoke a specific constructor.

  • Use MethodInfo para descobrir informações como o nome, o tipo de retorno, os parâmetros, os modificadores de acesso (como public ou private) e os detalhes de implementação (como abstract ou virtual) de um método.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. Use o método GetMethods ou o GetMethod de um Type para invocar um método específico.Use the GetMethods or GetMethod method of a Type to invoke a specific method.

  • Use FieldInfo para descobrir informações como o nome, os modificadores de acesso (como public ou private) e detalhes de implementação (como static) de um campo e para obter ou definir os valores de campo.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.

  • Use EventInfo para descobrir informações como o nome, o tipo de dados do manipulador de eventos, os atributos personalizados, o tipo de declaração e o tipo refletido de um evento e para adicionar ou remover manipuladores de evento.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.

  • Use PropertyInfo para descobrir informações como o nome, o tipo de dados, o tipo de declaração, o tipo refletido e o status somente leitura ou gravável de uma propriedade e para obter ou definir os valores da propriedade.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.

  • Use ParameterInfo para descobrir informações como o nome do parâmetro, o tipo de dados, se um parâmetro é um parâmetro de entrada ou de saída e a posição do parâmetro em uma assinatura de método.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.

  • Use CustomAttributeData para descobrir informações sobre atributos personalizados ao trabalhar no contexto de somente reflexão de um domínio do aplicativo.Use CustomAttributeData to discover information about custom attributes when you are working in the reflection-only context of an application domain. CustomAttributeData permite que você examine atributos sem criar instâncias deles.CustomAttributeData allows you to examine attributes without creating instances of them.

As classes do namespace System.Reflection.Emit fornecem uma forma especializada de reflexão que permite criar tipos em tempo de execução.The classes of the System.Reflection.Emit namespace provide a specialized form of reflection that enables you to build types at run time.

A reflexão também pode ser usada para criar aplicativos chamados navegadores de tipo, que permitem aos usuários selecionar tipos e, em seguida, exibir as informações sobre esses tipos.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.

Há outros usos para reflexão.There are other uses for reflection. Os compiladores de linguagens como o JScript usam reflexão para criar tabelas de símbolos.Compilers for languages such as JScript use reflection to construct symbol tables. As classes no namespace System.Runtime.Serialization usam reflexão para acessar dados e para determinar quais campos persistir.The classes in the System.Runtime.Serialization namespace use reflection to access data and to determine which fields to persist. As classes do namespace System.Runtime.Remoting usa a reflexão indiretamente por meio da serialização.The classes in the System.Runtime.Remoting namespace use reflection indirectly through serialization.

Tipos do tempo de execução na reflexãoRuntime Types in Reflection

A reflexão fornece classes, como Type e MethodInfo, para representar tipos, membros, parâmetros e outras entidades de código.Reflection provides classes, such as Type and MethodInfo, to represent types, members, parameters, and other code entities. No entanto, quando você usa a reflexão não trabalha diretamente com essas classes, a maioria das quais é abstrata (MustInherit no Visual Basic).However, when you use reflection you don't work directly with these classes, most of which are abstract (MustInherit in Visual Basic). Em vez disso, você trabalha com tipos fornecidos pelo CLR (Common Language Runtime).Instead, you work with types provided by the common language runtime (CLR).

Por exemplo, quando você usa o operador typeof C# (GetType no Visual Basic) para obter um objeto Type, o objeto é na verdade um 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 de Type e fornece implementações de todos os métodos abstratos.RuntimeType derives from Type, and provides implementations of all the abstract methods.

Essas classes de tempo de execução são internal (Friend no Visual Basic).These runtime classes are internal (Friend in Visual Basic). Elas não são documentadas separadamente de suas classes base porque seu comportamento é descrito na documentação da classe base.They are not documented separately from their base classes, because their behavior is described by the base class documentation.

TítuloTitle DescriçãoDescription
Exibindo informações de tipoViewing Type Information Descreve a classe Type e fornece exemplos de código que ilustram como usar Type com várias classes de reflexão para obter informações sobre construtores, métodos, campos, propriedades e eventos.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.
Reflexão e tipos genéricosReflection and Generic Types Explica como a reflexão trata os parâmetros de tipo e argumentos de tipo de tipos genéricos e métodos genéricos.Explains how reflection handles the type parameters and type arguments of generic types and generic methods.
Security Considerations for Reflection (Considerações sobre segurança relacionadas à reflexão)Security Considerations for Reflection Descreve as regras que determinam até que nível a reflexão pode ser usada para descobrir informações de tipo e tipos de acesso.Describes the rules that determine to what degree reflection can be used to discover type information and access types.
Dynamically Loading and Using Types (Carregando e usando tipos dinamicamente)Dynamically Loading and Using Types Descreve a interface de associação personalizada de reflexão que dá suporte à associação tardia.Describes the reflection custom-binding interface that supports late binding.
Como carregar assemblies no contexto somente reflexãoHow to: Load Assemblies into the Reflection-Only Context Descreve o contexto de carregamento de somente reflexão.Describes the reflection-only load context. Mostra como carregar um assembly, como testar o contexto e como examinar os atributos aplicados a um assembly no contexto de somente reflexão.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.
Acessando atributos personalizadosAccessing Custom Attributes Demonstra o uso de reflexão para consultar a existência do atributo e os valores.Demonstrates using reflection to query attribute existence and values.
Especificando nomes de tipo totalmente qualificadosSpecifying Fully Qualified Type Names Descreve o formato dos nomes de tipo totalmente qualificados nos termos da BNF (forma de Backus-Naur) e a sintaxe necessária para especificar os caracteres especiais, os nomes de assembly, os ponteiros, as referências e as matrizes.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.
Como conectar um delegado usando a reflexãoHow to: Hook Up a Delegate Using Reflection Explica como criar um delegado para um método e conectar o delegado a um evento.Explains how to create a delegate for a method and hook the delegate up to an event. Explica como criar um método de manipulação de eventos em tempo de execução usando DynamicMethod.Explains how to create an event-handling method at run time using DynamicMethod.
Emissão de métodos e assemblies dinâmicosEmitting Dynamic Methods and Assemblies Explica como gerar métodos dinâmicos e assemblies dinâmicos.Explains how to generate dynamic assemblies and dynamic methods.

ReferênciaReference

System.Type

System.Reflection

System.Reflection.Emit