Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo fornece comentários complementares à documentação de referência para esta API.
A Type classe é a raiz da System.Reflection funcionalidade e é a principal maneira de acessar metadados. Use os membros de Type para obter informações sobre uma declaração de tipo, sobre os membros de um tipo (como construtores, métodos, campos, propriedades e eventos de uma classe), bem como o módulo e a assembléia onde a classe é implantada.
Nenhuma permissão é necessária para que o código use reflexão para obter informações sobre tipos e seus membros, independentemente de seus níveis de acesso. Nenhuma permissão é necessária para que o código use reflexão para acessar membros públicos ou outros membros cujos níveis de acesso os tornariam visíveis durante a compilação normal. No entanto, para que seu código use reflexão para acessar membros que normalmente seriam inacessíveis, como métodos privados ou internos, ou campos protegidos de um tipo que sua classe não herda, seu código deve ter ReflectionPermission. Consulte considerações de segurança para reflexão.
Type é uma classe base abstrata que permite várias implementações. O sistema sempre fornecerá a classe RuntimeTypederivada. Na reflexão, todas as classes que começam com a palavra Runtime são criadas apenas uma vez por objeto no sistema e dão suporte a operações de comparação.
Observação
Em cenários multithreading, não bloqueie Type objetos para sincronizar o acesso aos static dados. Outro código, sobre o qual você não tem controle, também pode bloquear o tipo de classe. Isso pode resultar em um deadlock. Em vez disso, sincronize o acesso a dados estáticos bloqueando um objeto privado static .
Observação
Uma classe derivada pode acessar membros protegidos das classes base do código de chamada. Além disso, o acesso é permitido aos membros da montagem do código de chamada. Como regra, se você tiver permissão para acessar o código com vinculação antecipada, então você também poderá acessar o código com vinculação tardia.
Observação
Interfaces que estendem outras interfaces não herdam os métodos definidos nas interfaces estendidas.
Quais tipos um objeto Type representa?
Essa classe é segura para threads; vários threads podem ler simultaneamente de uma instância desse tipo. Uma instância da Type classe pode representar qualquer um dos seguintes tipos:
- Aulas
- Tipos de valor
- matrizes
- Interfaces
- Enumerações
- Delegados
- Tipos genéricos construídos e definições de tipo genérico
- Tipos de argumentos e parâmetros de tipo de tipos genéricos construídos, definições de tipo genérico e definições de método genérico
Recuperar um objeto Type
O Type objeto associado a um tipo específico pode ser obtido das seguintes maneiras:
O método de instância Object.GetType retorna um Type objeto que representa o tipo de uma instância. Como todos os tipos gerenciados derivam de Object, o método GetType pode ser chamado em uma instância de qualquer tipo.
O exemplo a seguir chama o Object.GetType método para determinar o tipo de runtime de cada objeto em uma matriz de objetos.
object[] values = { "word", true, 120, 136.34, 'a' }; foreach (var value in values) Console.WriteLine($"{value} - type {value.GetType().Name}"); // The example displays the following output: // word - type String // True - type Boolean // 120 - type Int32 // 136.34 - type Double // a - type Charlet values: obj[] = [| "word"; true; 120; 136.34; 'a' |] for value in values do printfn $"{value} - type {value.GetType().Name}" // The example displays the following output: // word - type String // True - type Boolean // 120 - type Int32 // 136.34 - type Double // a - type CharModule Example1 Public Sub Main() Dim values() As Object = { "word", True, 120, 136.34, "a"c } For Each value In values Console.WriteLine("{0} - type {1}", value, value.GetType().Name) Next End Sub End Module ' The example displays the following output: ' word - type String ' True - type Boolean ' 120 - type Int32 ' 136.34 - type Double ' a - type CharOs métodos estáticos Type.GetType retornam um Type objeto que representa um tipo especificado por seu nome totalmente qualificado.
Os métodos Module.GetTypes, Module.GetType e Module.FindTypes retornam objetos
Typeque representam os tipos definidos em um módulo. O primeiro método pode ser usado para obter uma matriz de Type objetos para todos os tipos públicos e privados definidos em um módulo. (Você pode obter uma instância deModuleatravés do método Assembly.GetModule ou Assembly.GetModules, ou através da propriedade Type.Module.)O System.Reflection.Assembly objeto contém vários métodos para recuperar as classes definidas em um assembly, incluindo Assembly.GetType, Assembly.GetTypese Assembly.GetExportedTypes.
O FindInterfaces método retorna uma lista filtrada de tipos de interface compatíveis com um tipo.
O GetElementType método retorna um
Typeobjeto que representa o elemento.Os métodos GetInterfaces e GetInterface retornam objetos Type que representam os tipos de interface compatíveis com um tipo.
O GetTypeArray método retorna uma matriz de Type objetos que representa os tipos especificados por um conjunto arbitrário de objetos. Os objetos são especificados com uma matriz do tipo Object.
Os métodos GetTypeFromProgID e GetTypeFromCLSID são fornecidos para interoperabilidade COM. Eles retornam um Type objeto que representa o tipo especificado por um
ProgIDouCLSID.O GetTypeFromHandle método é fornecido para interoperabilidade. Ele retorna um
Typeobjeto que representa o tipo especificado por um identificador de classe.O operador C#
typeof, o operador C++typeide o operador do Visual BasicGetTypeobtêm oTypeobjeto para um tipo.O MakeGenericType método retorna um Type objeto que representa um tipo genérico construído, que é um tipo construído aberto se sua ContainsGenericParameters propriedade retorna
truee um tipo construído fechado, caso contrário. Um tipo genérico pode ser instanciado apenas se estiver fechado.Os métodos MakeArrayType, MakePointerType e MakeByRefType retornam objetos Type que representam, respectivamente, uma matriz de um tipo especificado, um ponteiro para um tipo especificado e o tipo de um parâmetro de referência (
refem C#, 'byref' em F#,ByRefno Visual Basic).
Comparar tipos de objetos para ver se são iguais
Um Type objeto que representa um tipo é exclusivo; ou seja, duas Type referências de objeto se referem ao mesmo objeto se e somente se representarem o mesmo tipo. Isso permite a comparação de Type objetos usando a igualdade de referência. O exemplo a seguir compara os Type objetos que representam vários valores inteiros para determinar se eles são do mesmo tipo.
long number1 = 1635429;
int number2 = 16203;
double number3 = 1639.41;
long number4 = 193685412;
// Get the type of number1.
Type t = number1.GetType();
// Compare types of all objects with number1.
Console.WriteLine($"Type of number1 and number2 are equal: {Object.ReferenceEquals(t, number2.GetType())}");
Console.WriteLine($"Type of number1 and number3 are equal: {Object.ReferenceEquals(t, number3.GetType())}");
Console.WriteLine($"Type of number1 and number4 are equal: {Object.ReferenceEquals(t, number4.GetType())}");
// The example displays the following output:
// Type of number1 and number2 are equal: False
// Type of number1 and number3 are equal: False
// Type of number1 and number4 are equal: True
let number1 = 1635429L
let number2 = 16203
let number3 = 1639.41
let number4 = 193685412L
// Get the type of number1.
let t = number1.GetType()
// Compare types of all objects with number1.
printfn $"Type of number1 and number2 are equal: {Object.ReferenceEquals(t, number2.GetType())}"
printfn $"Type of number1 and number3 are equal: {Object.ReferenceEquals(t, number3.GetType())}"
printfn $"Type of number1 and number4 are equal: {Object.ReferenceEquals(t, number4.GetType())}"
// The example displays the following output:
// Type of number1 and number2 are equal: False
// Type of number1 and number3 are equal: False
// Type of number1 and number4 are equal: True
Module Example
Public Sub Main()
Dim number1 As Long = 1635429
Dim number2 As Integer = 16203
Dim number3 As Double = 1639.41
Dim number4 As Long = 193685412
' Get the type of number1.
Dim t As Type = number1.GetType()
' Compare types of all objects with number1.
Console.WriteLine("Type of number1 and number2 are equal: {0}",
Object.ReferenceEquals(t, number2.GetType()))
Console.WriteLine("Type of number1 and number3 are equal: {0}",
Object.ReferenceEquals(t, number3.GetType()))
Console.WriteLine("Type of number1 and number4 are equal: {0}",
Object.ReferenceEquals(t, number4.GetType()))
End Sub
End Module
' The example displays the following output:
' Type of number1 and number2 are equal: False
' Type of number1 and number3 are equal: False
' Type of number1 and number4 are equal: True