Reflexão (C# e Visual Basic)
Reflexo fornece objetos (do tipo Type) que descrevem a 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 os 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 têm significado na IL e não são usados em reflexão APIs. 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 Carregar dinamicamente e usando tipos.
Seções relacionadas
Para obter mais informações:
Consulte também
Referência
Domínios de aplicativo (C# e Visual Basic)
Conceitos
Assemblies no Common Language Runtime