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 usando 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
Observação |
---|
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 Recuperar as 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 Carregamento dinâmico e usando tipos.
Seções relacionadas
Para obter mais informações:
Consulte também
Conceitos
Outros recursos
Guia de programação de Visual Basic