Compartilhar via


Reflexão (C# e Visual Basic)

Reflexo fornece objetos (do tipo Type) que descrevem os assemblies, módulos e tipos. Pode-se usar reflection para criar dinamicamente uma instância de um tipo, vincular o tipo a um objeto existente, ou obter o tipo de um objeto existente e chamar seus métodos ou acessar seus campos e propriedades. Se você estiver usando atributos em seu código, reflexão permite acessá-los. Para obter mais informações, consulte Estendendo metadados por meio de atributos.

Aqui está um exemplo simples de reflexão usando o método estático GetType - herdadas por todos os tipos da Object classe - para obter o tipo de uma variável base:

' Using GetType to obtain type information: 
Dim i As Integer = 42
Dim type As System.Type = i.GetType()
System.Console.WriteLine(type)
// Using GetType to obtain type information: 
int i = 42;
System.Type type = i.GetType();
System.Console.WriteLine(type);

A saída é:

System.Int32

O exemplo a seguir usa a reflexão para obter o nome completo do assembly carregado.

' Using Reflection to get information from an Assembly: 
Dim info As System.Reflection.Assembly = GetType(System.Int32).Assembly
System.Console.WriteLine(info)
// Using Reflection to get information from an Assembly:
System.Reflection.Assembly info = typeof(System.Int32).Assembly;
System.Console.WriteLine(info);

A saída é:

mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

Dica

As palavras-chave C# protected e internal não possuem significado na IL e não são usadas as APIs de reflexão.Os termos correspondentes na IL são família e Assembly.Para identificar um internal método usando a reflexão, uso o IsAssembly propriedade.Para identificar um protected internal método, use o IsFamilyOrAssembly.

Visão geral de reflexão

Reflection é útil nas seguintes situações:

Seções relacionadas

Para obter mais informações:

Consulte também

Conceitos

Guia de Programação em C#

Outros recursos

Guia de programação do Visual Basic

Domínios de aplicativo (C# e Visual Basic)

Assemblies no Common Language Runtime