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:
Quando você tem que acessar atributos nos metadados do seu programa. Para obter mais informações, consulte Recuperando informações armazenadas em atributos.
Para examinar e instanciar tipos em um conjunto.
Para criar novos tipos em tempo de execução. Usar classes no System.Reflection.Emit.
Para executar ligação tardia, acessar métodos em tipos criados em tempo de execução. Consulte o tópico Carregando e usando tipos dinamicamente.
Seções relacionadas
Para obter mais informações:
Consulte também
Conceitos
Outros recursos
Guia de programação do Visual Basic