Partilhar via


Reflexão

As classes a System.Reflection namespace, junto com System.Type, permitem que você obter informações sobre carregado assemblies e os tipos definidos dentro deles, como classes, interfaces, e tipos de valor. Você também pode usar a reflexão para criar instâncias de tipo em tempo de execução e para chamar e acessá-los. Para tópicos sobre aspectos específicos da reflexão, consulte Tópicos relacionados no final dessa visão geral.

O common language runtime gerencia o carregador os domínios de aplicativo, que constituem definidos limites de objetos que têm o mesmo escopo do aplicativo. Esse gerenciamento inclui carregar cada assembly no domínio de aplicativo apropriado e controlar o layout de memória da hierarquia de tipo em cada assembly.

Assemblies contêm módulos, módulos contêm tipos e tipos contêm membros. Reflexo fornece objetos que encapsulam os assemblies, módulos e tipos. Você pode usar a reflexão para criar uma instância de um tipo dinamicamente, o tipo de vincular a um objeto existente ou obter o tipo de um objeto existente. Você pode chamar os métodos do tipo ou acessar suas propriedades e campos. Usos típicos de reflexão incluem o seguinte:

  • Use Assembly para definir e carregar assemblies, carregar módulos que estão listados no manifesto do assembly e localize o tipo deste assembly e criar uma instância do paragrafo.

  • Use Module para descobrir informações como o assembly que contém o módulo e as classes no módulo. Você também pode obter todos os métodos globais ou outros métodos específicos e não globais definidos no módulo.

  • Use ConstructorInfo para descobrir informações como, por exemplo, o nome, parâmetros, modificadores de acesso (como public ou private) e os detalhes de implementação (como abstract ou virtual) de um construtor. Use o GetConstructors ou GetConstructor o método de um Type para chamar um construtor específico.

  • Use MethodInfo para descobrir informações como, por exemplo, o nome, tipo, parâmetros de retorno, modificadores de acesso (como public ou private) e os detalhes de implementação (como abstract ou virtual) de um método. Use o GetMethods ou GetMethod o método de um Type para chamar um método específico.

  • Use FieldInfo para descobrir informações como, por exemplo, o nome, modificadores de acesso (como public ou private) e detalhes de implementação (como static) de um campo e para obter ou definir valores de campo.

  • Use EventInfo para descobrir informações como nome, tipo de dados do manipulador de eventos, atributos personalizados, a declaração de tipo e reflete o tipo de um evento e para adicionar ou remover manipuladores de eventos.

  • Use PropertyInfo para descobrir informações como, por exemplo, o nome, tipo de dados, tipo, declarativo refletidas tipo e o status de somente leitura ou gravação de uma propriedade para obter ou definir valores de propriedade.

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

  • Use CustomAttributeData para descobrir informações sobre os atributos personalizados quando você estiver trabalhando no contexto somente de reflexão de um domínio de aplicativo. CustomAttributeDatapermite que você examine atributos sem criar ocorrências delas.

As classes da System.Reflection.Emit namespace fornecem uma forma especializada de reflexão que lhe permite criar tipos em tempo de execução.

Reflexão também pode ser usado para criar aplicativos chamados de navegadores de tipo, que permitem aos usuários selecionar tipos e, em seguida, exiba as informações sobre esses tipos.

Há outros usos para reflexão. Compiladores de linguagens como, por exemplo, JScript usam a reflexão para construir as tabelas de símbolos. As classes de System.Runtime.Serialization namespace usar a reflexão para acessar os dados e determinar quais campos persistirem. As classes de System.Runtime.Remoting namespace usar reflexo indiretamente através de serialização.

Tópicos relacionados

Título

Descrição

Tipos de runtime em reflexão

Descreve os tipos internos, como RuntimeType, que herdam as classes abstratas de System.Reflection namespace e fornecem grande parte de sua implementação.

Exibindo informações de tipo

Descreve o Type de classe e fornece exemplos de código que ilustram como usar Type com várias classes de reflexão para obter informações sobre os construtores, métodos, campos, propriedades e eventos.

Reflexão e tipos genérico

Explica como a reflexão lida com os parâmetros de tipo e os argumentos de tipo de tipos genéricos e métodos genéricos.

Padrões de design usados pelas Classes de reflexão

Fornece uma tabela que mostra o método de nomeação padrão e o uso de classes de reflexão usados com mais freqüência, como o Module, Type, e MemberInfo classes.

Considerações de segurança para reflexão

Descreve as regras que determinam até que grau reflexão pode ser usado para descobrir os tipos de acesso e informações de tipo.

Carregar dinamicamente e usando tipos

Descreve a interface de ligação personalizada de reflexão que ofereça suporte a ligação tardia.

Como: Carregar Assemblies no contexto somente de reflexão

Descreve o contexto de carga somente de reflexão. Mostra como carregar um assembly, como testar o contexto e como examinar os atributos aplicados a um assembly no contexto somente de reflexão.

Acessando os membros padrão

Demonstra como usar a reflexão para membros de padrão de acesso que uma classe pode ter.

Acessando os valores de argumento padrão

Demonstra como usar a reflexão para argumentos de acesso que possuem valores padrão e como invocar métodos que possuem argumentos com valores padrão.

Acessando os atributos personalizados

Demonstra o uso de reflexo a existência do atributo de consulta e valores.

Especificando tipo nomes totalmente qualificados

Descreve o formato dos nomes de tipo totalmente qualificado em termos de formulário Backus-Naur (BNF) e a sintaxe necessária para especificar caracteres especiais, nomes de assembly, ponteiros, referências e matrizes.

API de reflexão não gerenciado

Descreve onde encontrar informações sobre como usar a reflexão não gerenciado para examinar metadados.

Como: Ligar a um delegado usando reflexão

Explica como criar um delegado para um método e conectar o delegado para um evento. Explica como criar um método de manipulação de eventos em tempo de execução usando DynamicMethod.

Emitindo Métodos Dinâmicos e Assemblies

Explica como gerar assemblies dinâmicos e métodos dinâmicos.

Referência

System.Type

System.Reflection

System.Reflection.Emit

Voltar ao início