Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Observação
Este artigo fornece observações complementares à documentação de referência para esta API.
A Type classe é a raiz da funcionalidade de System.Reflection e é a principal maneira de aceder a metadados. Use os membros de Type para obter informações sobre uma declaração de tipo, sobre os membros de um tipo (como os construtores, métodos, campos, propriedades e eventos de uma classe), assim como o módulo e o assembly nos quais a classe é implantada.
Não são necessárias permissões para que o código use a reflexão para obter informações sobre tipos e seus membros, independentemente de seus níveis de acesso. Não são necessárias permissões 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. Em reflexão, todas as classes que começam com a palavra Runtime são criadas apenas uma vez por objeto no sistema e suportam operações de comparação.
Observação
Em cenários de 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 seu tipo de classe. Isso pode resultar em um impasse. 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 do assembly do código de chamada. Como regra, se você tiver permissão de acesso em código de ligação antecipada, também terá acesso em código de ligação tardia.
Observação
As interfaces que estendem outras interfaces não herdam os métodos definidos nas interfaces estendidas.
Que tipos representa um objeto Type?
Esta classe é thread safe; Vários threads podem ser lidos simultaneamente a partir 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 genéricas de tipo
- Argumentos de tipo e parâmetros de tipo de tipos genéricos construídos, definições de tipo genéricas e definições de método genérico
Recuperar um objeto Type
O Type objeto associado a um determinado tipo 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 GetType método 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 tempo de execução 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 Module.GetTypesmétodos , Module.GetType, e Module.FindTypes retornam
Typeobjetos que 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 suportados por um tipo.
O GetElementType método retorna um
Typeobjeto que representa o elemento .Os GetInterfaces métodos e GetInterface retornam Type objetos que representam os tipos de interface suportados por um tipo.
O GetTypeArray método retorna uma matriz de Type objetos que representam 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 a interoperabilidade COM. Eles retornam um Type objeto que representa o tipo especificado por um
ProgIDouCLSID.O GetTypeFromHandle método é fornecido para a 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 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
true, e um tipo construído fechado caso contrário. Um tipo genérico só pode ser instanciado se estiver fechado.Os MakeArrayTypemétodos , MakePointerType, e MakeByRefType retornam Type objetos 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#,ByRefem Visual Basic).
Comparar objetos de tipo para igualdade
Um Type objeto que representa um tipo é único, ou seja, duas Type referências de objeto referem-se ao mesmo objeto se e somente se representarem o mesmo tipo. Isso permite a comparação de objetos usando a igualdade de referência Type. 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