Type.GetType Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Obtém um Type objeto que representa o tipo especificado.
Sobrecargas
| Nome | Description |
|---|---|
| GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) |
Obtém o tipo com o nome especificado, especificando se uma pesquisa diferencia maiúsculas de minúsculas e se deseja gerar uma exceção se o tipo não for encontrado e, opcionalmente, fornecer métodos personalizados para resolver o assembly e o tipo. |
| GetType() |
Obtém o atual Type. |
| GetType(String) |
Obtém o Type nome especificado, executando uma pesquisa que diferencia maiúsculas de minúsculas. |
| GetType(String, Boolean) |
Obtém o Type nome especificado, executando uma pesquisa que diferencia maiúsculas de minúsculas e especificando se uma exceção será gerada se o tipo não for encontrado. |
| GetType(String, Boolean, Boolean) |
Obtém o Type nome com o nome especificado, especificando se uma exceção será gerada se o tipo não for encontrado e se deseja executar uma pesquisa que diferencia maiúsculas de minúsculas. |
| GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) |
Obtém o tipo com o nome especificado, opcionalmente fornecendo métodos personalizados para resolver o assembly e o tipo. |
| GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean) |
Obtém o tipo com o nome especificado, especificando se uma exceção será gerada se o tipo não for encontrado e, opcionalmente, fornecendo métodos personalizados para resolver o assembly e o tipo. |
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean)
- Origem:
- Type.CoreCLR.cs
- Origem:
- Type.CoreCLR.cs
- Origem:
- Type.CoreCLR.cs
- Origem:
- Type.CoreCLR.cs
- Origem:
- Type.CoreCLR.cs
Obtém o tipo com o nome especificado, especificando se uma pesquisa diferencia maiúsculas de minúsculas e se deseja gerar uma exceção se o tipo não for encontrado e, opcionalmente, fornecer métodos personalizados para resolver o assembly e o tipo.
public:
static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::String ^, bool, Type ^> ^ typeResolver, bool throwOnError, bool ignoreCase);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError, bool ignoreCase);
public static Type GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly> assemblyResolver, Func<System.Reflection.Assembly,string,bool,Type> typeResolver, bool throwOnError, bool ignoreCase);
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError, bool ignoreCase);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool * bool -> Type
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool * bool -> Type
Public Shared Function GetType (typeName As String, assemblyResolver As Func(Of AssemblyName, Assembly), typeResolver As Func(Of Assembly, String, Boolean, Type), throwOnError As Boolean, ignoreCase As Boolean) As Type
Parâmetros
- typeName
- String
O nome do tipo a ser obtido. Se o typeResolver parâmetro for fornecido, o nome do tipo poderá ser qualquer cadeia typeResolver de caracteres capaz de resolver. Se o assemblyResolver parâmetro for fornecido ou se a resolução de tipo padrão for usada, typeName deverá ser um nome qualificado para assembly (consulte AssemblyQualifiedName), a menos que o tipo esteja no assembly em execução no momento ou em mscorlib.dll/System.Private.CoreLib.dll, nesse caso, é suficiente fornecer o nome do tipo qualificado pelo namespace.
- assemblyResolver
- Func<AssemblyName,Assembly>
Um método que localiza e retorna o assembly especificado em typeName. O nome do assembly é passado como assemblyResolver um AssemblyName objeto. Se typeName não contiver o nome de um assembly, assemblyResolver não será chamado. Se assemblyResolver não for fornecido, a resolução de assembly padrão será executada.
Cuidado: não passe métodos de chamadores desconhecidos ou não confiáveis. Isso pode resultar em elevação de privilégio para código mal-intencionado. Use apenas os métodos que você fornece ou com os quais esteja familiarizado.
Um método que localiza e retorna o tipo especificado pelo typeName assembly que é retornado por assemblyResolver ou pela resolução de assembly padrão. Se nenhum assembly for fornecido, o método poderá fornecer um. O método também usa um parâmetro que especifica se uma pesquisa não diferencia maiúsculas de minúsculas; o valor de ignoreCase é passado para esse parâmetro.
Cuidado: não passe métodos de chamadores desconhecidos ou não confiáveis.
- throwOnError
- Boolean
true para gerar uma exceção se o tipo não puder ser encontrado; false para retornar null. Especificar false também suprime algumas outras condições de exceção, mas não todas elas. Consulte a seção Exceções.
- ignoreCase
- Boolean
true para executar uma pesquisa typeNameque não diferencia maiúsculas de minúsculas, false para executar uma pesquisa typeNameque diferencia maiúsculas de minúsculas.
Retornos
O tipo com o nome especificado. Se o tipo não for encontrado, o throwOnError parâmetro especifica se null é retornado ou uma exceção é gerada. Em alguns casos, uma exceção é gerada independentemente do valor de throwOnError. Consulte a seção Exceções.
- Atributos
Exceções
typeName é null.
Um inicializador de classe é invocado e gera uma exceção.
throwOnError é true e o tipo não foi encontrado.
- ou -
throwOnError é true e typeName contém caracteres inválidos, como uma guia inserida.
- ou -
throwOnError é true e typeName é uma cadeia de caracteres vazia.
- ou -
throwOnError é true e typeName representa um tipo de matriz com um tamanho inválido.
- ou -
typeName representa uma matriz de TypedReference.
Ocorre um erro quando typeName é analisado em um nome de tipo e um nome de assembly (por exemplo, quando o nome do tipo simples inclui um caractere especial sem escape).
- ou -
throwOnError é true e typeName contém sintaxe inválida (por exemplo, "MyType[,*,]").
- ou -
typeName representa um tipo genérico que tem um tipo de ponteiro, um ByRef tipo ou Void como um de seus argumentos de tipo.
- ou -
typeName representa um tipo genérico que tem um número incorreto de argumentos de tipo.
- ou -
typeName representa um tipo genérico e um de seus argumentos de tipo não atende às restrições para o parâmetro de tipo correspondente.
throwOnError é true e o assembly ou uma de suas dependências não foi encontrado.
O assembly ou uma de suas dependências foi encontrado, mas não pôde ser carregado.
- ou -
typeName contém um nome de assembly inválido.
- ou -
typeName é um nome de assembly válido sem um nome de tipo.
O assembly ou uma de suas dependências não é um assembly válido para o runtime carregado no momento.
Comentários
No .NET Core 3.0 e versões posteriores, se assemblyResolver for nulo, as cargas de assembly disparadas por essa API serão afetadas pelo valor atual de AssemblyLoadContext.CurrentContextualReflectionContext.
Para obter mais informações sobre essa API, consulte comentários da API Suplementar para Type.GetType.
Aplica-se a
GetType()
- Origem:
- Type.cs
- Origem:
- Type.cs
- Origem:
- Type.cs
- Origem:
- Type.cs
- Origem:
- Type.cs
Obtém o atual Type.
public:
Type ^ GetType();
public:
virtual Type ^ GetType();
public Type GetType();
override this.GetType : unit -> Type
Public Function GetType () As Type
Retornos
O atual Type.
Implementações
Exceções
Um inicializador de classe é invocado e gera uma exceção.
Confira também
Aplica-se a
GetType(String)
- Origem:
- Type.CoreCLR.cs
- Origem:
- Type.CoreCLR.cs
- Origem:
- Type.CoreCLR.cs
- Origem:
- Type.CoreCLR.cs
- Origem:
- Type.CoreCLR.cs
Obtém o Type nome especificado, executando uma pesquisa que diferencia maiúsculas de minúsculas.
public:
static Type ^ GetType(System::String ^ typeName);
public static Type GetType(string typeName);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName);
public static Type? GetType(string typeName);
static member GetType : string -> Type
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string -> Type
Public Shared Function GetType (typeName As String) As Type
Parâmetros
- typeName
- String
O nome qualificado do assembly do tipo a ser obtido. Consulte AssemblyQualifiedName. Se o tipo estiver no assembly em execução no momento ou em mscorlib.dll/System.Private.CoreLib.dll, será suficiente fornecer o nome do tipo qualificado por seu namespace.
Retornos
O tipo com o nome especificado, se encontrado; caso contrário, null.
- Atributos
Exceções
typeName é null.
Um inicializador de classe é invocado e gera uma exceção.
typeName representa um tipo genérico que tem um tipo de ponteiro, um ByRef tipo ou Void como um de seus argumentos de tipo.
- ou -
typeName representa um tipo genérico que tem um número incorreto de argumentos de tipo.
- ou -
typeName representa um tipo genérico e um de seus argumentos de tipo não atende às restrições para o parâmetro de tipo correspondente.
typeName representa um tipo inválido, por exemplo, uma matriz de TypedReference.
O assembly ou uma de suas dependências foi encontrado, mas não pôde ser carregado.
Observação: no .NET para aplicativos da Windows Store ou na Biblioteca de Classes Portátil, pegue a exceção de classe base, IOExceptionem vez disso.
O assembly não é válido para o runtime carregado no momento.
Exemplos
O exemplo a seguir recupera o tipo e System.Int32 usa esse objeto de tipo para exibir a FullName propriedade de System.Int32.
using System;
class Example
{
public static void Main()
{
try {
// Get the type of a specified class.
Type myType1 = Type.GetType("System.Int32");
Console.WriteLine("The full name is {0}.\n", myType1.FullName);
}
catch (TypeLoadException e)
{
Console.WriteLine("{0}: Unable to load type System.Int32", e.GetType().Name);
}
try {
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Type myType2 = Type.GetType("NoneSuch", true);
Console.WriteLine("The full name is {0}.", myType2.FullName);
}
catch(TypeLoadException e) {
Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name);
}
}
}
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
open System
try
// Get the type of a specified class.
let myType1 = Type.GetType "System.Int32"
printfn $"The full name is {myType1.FullName}.\n"
with :? TypeLoadException as e ->
printfn $"{e.GetType().Name}: Unable to load type System.Int32"
try
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
let myType2 = Type.GetType("NoneSuch", true)
printfn $"The full name is {myType2.FullName}."
with :? TypeLoadException as e ->
printfn $"{e.GetType().Name}: Unable to load type NoneSuch"
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
Class Example
Public Shared Sub Main()
Try
' Get the type of the specified class.
Dim myType1 As Type = Type.GetType("System.Int32")
Console.WriteLine("The full name is {0}.", myType1.FullName)
Catch e As TypeLoadException
Console.WriteLine("{0}: Unable to load type System.Int32",
e.GetType().Name)
End Try
Console.WriteLine()
Try
' Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Dim myType2 As Type = Type.GetType("NoneSuch", True)
Console.WriteLine("The full name is {0}.", myType2.FullName)
Catch e As TypeLoadException
Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name)
End Try
End Sub
End Class
' The example displays the following output:
' The full name is System.Int32.
'
' TypeLoadException: Unable to load type NoneSuch
Comentários
Você pode usar o GetType método para obter um Type objeto para um tipo em outro assembly se souber seu nome qualificado para assembly, que pode ser obtido de AssemblyQualifiedName.
GetType causa o carregamento do assembly especificado em typeName. Você também pode carregar um assembly usando o Assembly.Load método e, em seguida, usar o Assembly.GetType método ou Assembly.GetTypes para obter Type objetos. Se um tipo estiver em um assembly conhecido pelo programa em tempo de compilação, será mais eficiente usar typeof em C# ou no GetType operador no Visual Basic.
Observação
Se typeName não for possível encontrar, a chamada para o GetType(String) método retornará null. Ele não gera uma exceção. Para controlar se uma exceção é gerada, chame uma sobrecarga do GetType método que tem um throwOnError parâmetro.
Somente .NET Framework: GetType só funciona em assemblies carregados do disco. Se você chamar GetType para pesquisar um tipo definido em um assembly dinâmico definido usando os System.Reflection.Emit serviços, você poderá obter um comportamento inconsistente. O comportamento depende se o assembly dinâmico é persistente, ou seja, criado usando os RunAndSave modos ou Save de acesso da System.Reflection.Emit.AssemblyBuilderAccess enumeração. Se o assembly dinâmico for persistente e tiver sido gravado no disco antes GetType de ser chamado, o carregador encontrará o assembly salvo no disco, carregará esse assembly e recuperará o tipo desse assembly. Se o assembly não tiver sido salvo no disco quando GetType for chamado, o método retornará null.
GetType não entende assemblies dinâmicos transitórios; portanto, a chamada GetType para recuperar um tipo em um assembly dinâmico transitório retorna null.
No .NET Framework, para usar GetType em um módulo dinâmico, assine o AppDomain.AssemblyResolve evento e chame GetType antes de salvar. Caso contrário, você obterá duas cópias do assembly na memória.
No .NET Core 3.0 e versões posteriores, as cargas de assembly disparadas por essa API são afetadas pelo valor atual de AssemblyLoadContext.CurrentContextualReflectionContext.
A tabela a seguir mostra quais membros de uma classe base são retornados pelos métodos Get ao refletir sobre um tipo.
| Tipo de Membro | Estático | Não estático |
|---|---|---|
| Construtor | No | No |
| Campo | No | Sim. Um campo permanece sempre oculto por nome e assinatura. |
| Acontecimento | Não aplicável | A regra de sistema do tipo comum é que a herança é a mesma dos métodos que implementam a propriedade. A reflexão trata as propriedades como hide-by-name-and-signature. Veja a observação 2 abaixo. |
| Método | No | Sim. Um método (virtual e não virtual) pode permanecer oculto por nome ou por nome e assinatura. |
| Tipo aninhado | No | No |
| Propriedade | Não aplicável | A regra de sistema do tipo comum é que a herança é a mesma dos métodos que implementam a propriedade. A reflexão trata as propriedades como hide-by-name-and-signature. Veja a observação 2 abaixo. |
Oculto por nome e assinatura considera todas as partes da assinatura, inclusive modificadores personalizados, tipos de retorno, tipos de parâmetro, sentinelas e convenções de chamada não gerenciadas. Essa é uma comparação binária.
Para reflexão, propriedades e eventos permanecem ocultos por nome e assinatura. Se você tiver uma propriedade com um acessador get e um set na classe base, mas a classe derivada tiver apenas um acessador get, a propriedade de classe derivada ocultará a propriedade de classe base e você não poderá acessar o setter na classe base.
Atributos personalizados não fazem parte do sistema de tipos comuns.
Matrizes ou tipos COM não são pesquisados, a menos que já tenham sido carregados na tabela de classes disponíveis.
typeName pode ser o nome do tipo qualificado por seu namespace ou um nome qualificado para assembly que inclui uma especificação de nome de assembly. Consulte AssemblyQualifiedName.
Se typeName incluir o namespace, mas não o nome do assembly, esse método pesquisa apenas o assembly do objeto de chamada e mscorlib.dll/System.Private.CoreLib.dll, nessa ordem. Se typeName for totalmente qualificado com o nome do assembly parcial ou completo, esse método pesquisa no assembly especificado. Se o assembly tiver um nome forte, um nome de assembly completo será necessário.
A AssemblyQualifiedName propriedade retorna um nome de tipo totalmente qualificado, incluindo tipos aninhados, o nome do assembly e argumentos de tipo genérico. Todos os compiladores que dão suporte ao common language runtime emitirão o nome simples de uma classe aninhada e a reflexão construirá um nome mutilado quando consultado, de acordo com as convenções a seguir.
Observação
A arquitetura do processador faz parte da identidade do assembly e pode ser especificada como parte das cadeias de caracteres de nome do assembly. Por exemplo, "ProcessorArchitecture=msil". No entanto, ela não está incluída na cadeia de caracteres retornada pela AssemblyQualifiedName propriedade, por motivos de compatibilidade. Você também pode carregar tipos criando um AssemblyName objeto e passando-o para uma sobrecarga apropriada do Load método. Em seguida, você pode usar o Assembly.GetType método para carregar tipos do assembly. Consulte também AssemblyName.ProcessorArchitecture.
| Delimitador | Meaning |
|---|---|
| Barra invertida (\) | Caractere de escape. |
| Backtick (') | Precede um ou mais dígitos que representam o número de parâmetros de tipo, localizados no final do nome de um tipo genérico. |
| Colchetes ([]) | Coloque uma lista de argumentos de tipo genérico para um tipo genérico construído; em uma lista de argumentos de tipo, coloque um tipo qualificado para assembly. |
| Vírgula (,) | Precede o nome do Assembly. |
| Período (.) | Denota identificadores de namespace. |
| Sinal de adição (+) | Precede uma classe aninhada. |
Por exemplo, o nome totalmente qualificado para uma classe pode ter esta aparência:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Se o namespace fosse TopNamespace.Sub+Namespace, a cadeia de caracteres teria que preceder o sinal de adição (+) com um caractere de escape (\) para impedir que ele fosse interpretado como um separador de aninhamento. A reflexão emite essa cadeia de caracteres da seguinte maneira:
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
Um "++" se torna "\+\+", e um "\" se torna "\\".
Esse nome qualificado pode ser persistido e usado posteriormente para carregar o Type. Para pesquisar e carregar um Type, use GetType apenas com o nome do tipo ou com o nome de tipo qualificado do assembly. GetType com o nome do tipo só procurará o Type assembly do chamador e, em seguida, no assembly do Sistema. GetType com o nome de tipo qualificado do assembly procurará em Type qualquer assembly.
Os nomes de tipo podem incluir caracteres à direita que denotam informações adicionais sobre o tipo, como se o tipo é um tipo de referência, um tipo de ponteiro ou um tipo de matriz. Para recuperar o nome do tipo sem esses caracteres à direita, use t.GetElementType().ToString(), onde t está o tipo.
Os espaços são relevantes em todos os componentes de nome de tipo, exceto no nome do assembly. No nome do assembly, os espaços antes do separador '', são relevantes, mas os espaços após o separador ''são ignorados.
O nome de um tipo genérico termina com um backtick (') seguido por dígitos que representam o número de argumentos de tipo genérico. A finalidade desse mangling de nome é permitir que os compiladores ofereçam suporte a tipos genéricos com o mesmo nome, mas com números diferentes de parâmetros de tipo, ocorrendo no mesmo escopo. Por exemplo, a reflexão retorna os nomes Tuple`1 mutilados e Tuple`2 dos métodos genéricos Tuple(Of T) e Tuple(Of T0, T1) no Visual Basic ou Tuple<T> no Tuple<T0, T1> Visual C#.
Para tipos genéricos, a lista de argumentos de tipo é entre colchetes e os argumentos de tipo são separados por vírgulas. Por exemplo, um genérico Dictionary<TKey,TValue> tem dois parâmetros de tipo. Uma Dictionary<TKey,TValue> das MyType chaves do tipo String pode ser representada da seguinte maneira:
System.Collections.Generic.Dictionary`2[System.String,MyType]
Para especificar um tipo qualificado por assembly dentro de uma lista de argumentos de tipo, coloque o tipo qualificado por assembly entre colchetes. Caso contrário, as vírgulas que separam as partes do nome qualificado para assembly são interpretadas como delimitando argumentos de tipo adicionais. Por exemplo, um Dictionary<TKey,TValue> dos MyType fromMyAssembly.dll, com chaves do tipo String, pode ser especificado da seguinte maneira:
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
Observação
Um tipo qualificado por assembly só pode ser colocado entre colchetes quando ele aparece dentro de uma lista de parâmetros de tipo. As regras para pesquisar assemblies para tipos qualificados e não qualificados em listas de parâmetros de tipo são as mesmas que as regras para tipos não qualificados e não qualificados não qualificados.
Tipos anuláveis são um caso especial de tipos genéricos. Por exemplo, uma anulável Int32 é representada pela cadeia de caracteres "System.Nullable'1[System.Int32]".
Observação
Você também pode obter tipos anuláveis usando operadores de tipo. Por exemplo, o tipo que permite valor nulo Boolean é retornado por typeof(Nullable<bool>) C# e no GetType(Nullable(Of Boolean)) Visual Basic.
A tabela a seguir mostra a sintaxe com GetType a qual você usa para vários tipos.
| Para obter | Utilização |
|---|---|
| Uma anulável Int32 | Type.GetType("System.Nullable`1[System.Int32]") |
Um ponteiro não gerenciado para MyType |
Type.GetType("MyType*") |
Um ponteiro não gerenciado para um ponteiro para MyType |
Type.GetType("MyType**") |
Um ponteiro gerenciado ou uma referência a MyType |
Type.GetType("MyType&"). Observe que, ao contrário dos ponteiros, as referências são limitadas a um nível. |
| Uma classe pai e uma classe aninhada | Type.GetType("MyParentClass+MyNestedClass") |
| Uma matriz unidimensional com um limite inferior de 0 | Type.GetType("MyType[]") |
| Uma matriz unidimensional com um limite inferior desconhecido | Type.GetType("MyType[*]") |
| Uma matriz ndimensional | Uma vírgula (,) dentro dos colchetes um total de n-1 vezes. Por exemplo, System.Object[,,] representa uma matriz tridimensional Object . |
| Uma matriz de matrizes unidimensionais | Type.GetType("MyType[][]") |
| Uma matriz bidimensional retangular com limites inferiores desconhecidos | Type.GetType("MyType[,]") |
| Um tipo genérico com um argumento de tipo | Type.GetType("MyGenericType`1[MyType]") |
| Um tipo genérico com dois argumentos de tipo | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
| Um tipo genérico com dois argumentos de tipo qualificados para assembly | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
| Um tipo genérico qualificado por assembly com um argumento de tipo qualificado para assembly | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly") |
| Um tipo genérico cujo argumento de tipo é um tipo genérico com dois argumentos de tipo | Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]") |
Confira também
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Especificando nomes de tipo totalmente qualificados
Aplica-se a
GetType(String, Boolean)
- Origem:
- Type.CoreCLR.cs
- Origem:
- Type.CoreCLR.cs
- Origem:
- Type.CoreCLR.cs
- Origem:
- Type.CoreCLR.cs
- Origem:
- Type.CoreCLR.cs
Obtém o Type nome especificado, executando uma pesquisa que diferencia maiúsculas de minúsculas e especificando se uma exceção será gerada se o tipo não for encontrado.
public:
static Type ^ GetType(System::String ^ typeName, bool throwOnError);
public static Type GetType(string typeName, bool throwOnError);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName, bool throwOnError);
public static Type? GetType(string typeName, bool throwOnError);
static member GetType : string * bool -> Type
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * bool -> Type
Public Shared Function GetType (typeName As String, throwOnError As Boolean) As Type
Parâmetros
- typeName
- String
O nome qualificado do assembly do tipo a ser obtido. Consulte AssemblyQualifiedName. Se o tipo estiver no assembly em execução no momento ou em mscorlib.dll/System.Private.CoreLib.dll, será suficiente fornecer o nome do tipo qualificado por seu namespace.
- throwOnError
- Boolean
true para gerar uma exceção se o tipo não puder ser encontrado; false para retornar null. Especificar false também suprime algumas outras condições de exceção, mas não todas elas. Consulte a seção Exceções.
Retornos
O tipo com o nome especificado. Se o tipo não for encontrado, o throwOnError parâmetro especifica se null é retornado ou uma exceção é gerada. Em alguns casos, uma exceção é gerada independentemente do valor de throwOnError. Consulte a seção Exceções.
- Atributos
Exceções
typeName é null.
Um inicializador de classe é invocado e gera uma exceção.
throwOnError é true e o tipo não foi encontrado.
- ou -
throwOnError é true e typeName contém caracteres inválidos, como uma guia inserida.
- ou -
throwOnError é true e typeName é uma cadeia de caracteres vazia.
- ou -
throwOnError é true e typeName representa um tipo de matriz com um tamanho inválido.
- ou -
typeName representa uma matriz de TypedReference.
throwOnError é true e typeName contém sintaxe inválida. Por exemplo, "MyType[,*,]".
- ou -
typeName representa um tipo genérico que tem um tipo de ponteiro, um ByRef tipo ou Void como um de seus argumentos de tipo.
- ou -
typeName representa um tipo genérico que tem um número incorreto de argumentos de tipo.
- ou -
typeName representa um tipo genérico e um de seus argumentos de tipo não atende às restrições para o parâmetro de tipo correspondente.
throwOnError é true e o assembly ou uma de suas dependências não foi encontrado.
O assembly ou uma de suas dependências foi encontrado, mas não pôde ser carregado.
Observação: no .NET para aplicativos da Windows Store ou na Biblioteca de Classes Portátil, pegue a exceção de classe base, IOExceptionem vez disso.
O assembly ou uma de suas dependências não é válido para o runtime carregado no momento.
Exemplos
O exemplo a seguir recupera o tipo e System.Int32 usa esse objeto de tipo para exibir a FullName propriedade de System.Int32. Se um objeto de tipo se referir a um assembly que não existe, este exemplo gerará uma exceção.
using System;
class Example
{
public static void Main()
{
try {
// Get the type of a specified class.
Type myType1 = Type.GetType("System.Int32");
Console.WriteLine("The full name is {0}.\n", myType1.FullName);
}
catch (TypeLoadException e)
{
Console.WriteLine("{0}: Unable to load type System.Int32", e.GetType().Name);
}
try {
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Type myType2 = Type.GetType("NoneSuch", true);
Console.WriteLine("The full name is {0}.", myType2.FullName);
}
catch(TypeLoadException e) {
Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name);
}
}
}
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
open System
try
// Get the type of a specified class.
let myType1 = Type.GetType "System.Int32"
printfn $"The full name is {myType1.FullName}.\n"
with :? TypeLoadException as e ->
printfn $"{e.GetType().Name}: Unable to load type System.Int32"
try
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
let myType2 = Type.GetType("NoneSuch", true)
printfn $"The full name is {myType2.FullName}."
with :? TypeLoadException as e ->
printfn $"{e.GetType().Name}: Unable to load type NoneSuch"
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
Class Example
Public Shared Sub Main()
Try
' Get the type of the specified class.
Dim myType1 As Type = Type.GetType("System.Int32")
Console.WriteLine("The full name is {0}.", myType1.FullName)
Catch e As TypeLoadException
Console.WriteLine("{0}: Unable to load type System.Int32",
e.GetType().Name)
End Try
Console.WriteLine()
Try
' Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Dim myType2 As Type = Type.GetType("NoneSuch", True)
Console.WriteLine("The full name is {0}.", myType2.FullName)
Catch e As TypeLoadException
Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name)
End Try
End Sub
End Class
' The example displays the following output:
' The full name is System.Int32.
'
' TypeLoadException: Unable to load type NoneSuch
Comentários
Você pode usar o GetType método para obter um Type objeto para um tipo em outro assembly se souber seu nome qualificado para assembly, que pode ser obtido de AssemblyQualifiedName.
GetType causa o carregamento do assembly especificado em typeName. Você também pode carregar um assembly usando o Assembly.Load método e, em seguida, usar o Assembly.GetType método ou Assembly.GetTypes para obter Type objetos. Se um tipo estiver em um assembly conhecido pelo programa em tempo de compilação, será mais eficiente usar typeof em C# ou no GetType operador no Visual Basic.
Somente .NET Framework: GetType só funciona em assemblies carregados do disco. Se você chamar GetType para pesquisar um tipo definido em um assembly dinâmico definido usando os System.Reflection.Emit serviços, você poderá obter um comportamento inconsistente. O comportamento depende se o assembly dinâmico é persistente, ou seja, criado usando os RunAndSave modos ou Save de acesso da System.Reflection.Emit.AssemblyBuilderAccess enumeração. Se o assembly dinâmico for persistente e tiver sido gravado no disco antes GetType de ser chamado, o carregador encontrará o assembly salvo no disco, carregará esse assembly e recuperará o tipo desse assembly. Se o assembly não tiver sido salvo no disco quando GetType for chamado, o método retornará null.
GetType não entende assemblies dinâmicos transitórios; portanto, a chamada GetType para recuperar um tipo em um assembly dinâmico transitório retorna null.
No .NET Framework, para usar GetType em um módulo dinâmico, assine o AppDomain.AssemblyResolve evento e chame GetType antes de salvar. Caso contrário, você obterá duas cópias do assembly na memória.
No .NET Core 3.0 e versões posteriores, as cargas de assembly disparadas por essa API são afetadas pelo valor atual de AssemblyLoadContext.CurrentContextualReflectionContext.
O throwOnError parâmetro especifica o que acontece quando o tipo não é encontrado e também suprime determinadas outras condições de exceção, conforme descrito na seção Exceções. Algumas exceções são geradas independentemente do valor de throwOnError. Por exemplo, se o tipo for encontrado, mas não puder ser carregado, um TypeLoadException será gerado mesmo se throwOnError for false.
A tabela a seguir mostra quais membros de uma classe base são retornados pelos métodos Get ao refletir sobre um tipo.
| Tipo de Membro | Estático | Não estático |
|---|---|---|
| Construtor | No | No |
| Campo | No | Sim. Um campo permanece sempre oculto por nome e assinatura. |
| Acontecimento | Não aplicável | A regra de sistema do tipo comum é que a herança é a mesma dos métodos que implementam a propriedade. A reflexão trata as propriedades como hide-by-name-and-signature. Veja a observação 2 abaixo. |
| Método | No | Sim. Um método (virtual e não virtual) pode permanecer oculto por nome ou por nome e assinatura. |
| Tipo aninhado | No | No |
| Propriedade | Não aplicável | A regra de sistema do tipo comum é que a herança é a mesma dos métodos que implementam a propriedade. A reflexão trata as propriedades como hide-by-name-and-signature. Veja a observação 2 abaixo. |
Oculto por nome e assinatura considera todas as partes da assinatura, inclusive modificadores personalizados, tipos de retorno, tipos de parâmetro, sentinelas e convenções de chamada não gerenciadas. Essa é uma comparação binária.
Para reflexão, propriedades e eventos permanecem ocultos por nome e assinatura. Se você tiver uma propriedade com um acessador get e um set na classe base, mas a classe derivada tiver apenas um acessador get, a propriedade de classe derivada ocultará a propriedade de classe base e você não poderá acessar o setter na classe base.
Atributos personalizados não fazem parte do sistema de tipos comuns.
Matrizes ou tipos COM não são pesquisados, a menos que já tenham sido carregados na tabela de classes disponíveis.
typeName pode ser o nome do tipo qualificado por seu namespace ou um nome qualificado para assembly que inclui uma especificação de nome de assembly. Consulte AssemblyQualifiedName.
Se typeName incluir o namespace, mas não o nome do assembly, esse método pesquisa apenas o assembly do objeto de chamada e mscorlib.dll/System.Private.CoreLib.dll, nessa ordem. Se typeName for totalmente qualificado com o nome do assembly parcial ou completo, esse método pesquisa no assembly especificado. Se o assembly tiver um nome forte, um nome de assembly completo será necessário.
A AssemblyQualifiedName propriedade retorna um nome de tipo totalmente qualificado, incluindo tipos aninhados, o nome do assembly e argumentos genéricos. Todos os compiladores que dão suporte ao common language runtime emitirão o nome simples de uma classe aninhada e a reflexão construirá um nome mutilado quando consultado, de acordo com as convenções a seguir.
Observação
A arquitetura do processador faz parte da identidade do assembly e pode ser especificada como parte das cadeias de caracteres de nome do assembly. Por exemplo, "ProcessorArchitecture=msil". No entanto, ela não está incluída na cadeia de caracteres retornada pela AssemblyQualifiedName propriedade, por motivos de compatibilidade. Você também pode carregar tipos criando um AssemblyName objeto e passando-o para uma sobrecarga apropriada do Load método. Em seguida, você pode usar o Assembly.GetType método para carregar tipos do assembly. Consulte também AssemblyName.ProcessorArchitecture.
| Delimitador | Meaning |
|---|---|
| Barra invertida (\) | Caractere de escape. |
| Backtick (') | Precede um ou mais dígitos que representam o número de parâmetros de tipo, localizados no final do nome de um tipo genérico. |
| Colchetes ([]) | Coloque uma lista de argumentos de tipo genérico para um tipo genérico construído; em uma lista de argumentos de tipo, coloque um tipo qualificado para assembly. |
| Vírgula (,) | Precede o nome do Assembly. |
| Período (.) | Denota identificadores de namespace. |
| Sinal de adição (+) | Precede uma classe aninhada. |
Por exemplo, o nome totalmente qualificado para uma classe pode ter esta aparência:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Se o namespace fosse TopNamespace.Sub+Namespace, a cadeia de caracteres teria que preceder o sinal de adição (+) com um caractere de escape (\) para impedir que ele fosse interpretado como um separador de aninhamento. A reflexão emite essa cadeia de caracteres da seguinte maneira:
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
Um "++" se torna "\+\+", e um "\" se torna "\\".
Esse nome qualificado pode ser persistido e usado posteriormente para carregar o Type. Para pesquisar e carregar um Type, use GetType apenas com o nome do tipo ou com o nome de tipo qualificado do assembly. GetType com o nome do tipo só procurará o Type assembly do chamador e, em seguida, no assembly do Sistema. GetType com o nome de tipo qualificado do assembly procurará em Type qualquer assembly.
Os nomes de tipo podem incluir caracteres à direita que denotam informações adicionais sobre o tipo, como se o tipo é um tipo de referência, um tipo de ponteiro ou um tipo de matriz. Para recuperar o nome do tipo sem esses caracteres à direita, use t.GetElementType().ToString(), onde t está o tipo.
Os espaços são relevantes em todos os componentes de nome de tipo, exceto no nome do assembly. No nome do assembly, os espaços antes do separador '', são relevantes, mas os espaços após o separador ''são ignorados.
O nome de um tipo genérico termina com um backtick (') seguido por dígitos que representam o número de argumentos de tipo genérico. A finalidade desse mangling de nome é permitir que os compiladores ofereçam suporte a tipos genéricos com o mesmo nome, mas com números diferentes de parâmetros de tipo, ocorrendo no mesmo escopo. Por exemplo, a reflexão retorna os nomes Tuple`1 mutilados e Tuple`2 dos métodos genéricos Tuple(Of T) e Tuple(Of T0, T1) no Visual Basic ou Tuple<T> no Tuple<T0, T1> Visual C#.
Para tipos genéricos, a lista de argumentos de tipo é entre colchetes e os argumentos de tipo são separados por vírgulas. Por exemplo, um genérico Dictionary<TKey,TValue> tem dois parâmetros de tipo. Uma Dictionary<TKey,TValue> das MyType chaves do tipo String pode ser representada da seguinte maneira:
System.Collections.Generic.Dictionary`2[System.String,MyType]
Para especificar um tipo qualificado por assembly dentro de uma lista de argumentos de tipo, coloque o tipo qualificado por assembly entre colchetes. Caso contrário, as vírgulas que separam as partes do nome qualificado para assembly são interpretadas como delimitando argumentos de tipo adicionais. Por exemplo, um Dictionary<TKey,TValue> de MyType MyAssembly.dll, com chaves do tipo String, pode ser especificado da seguinte maneira:
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
Observação
Um tipo qualificado por assembly só pode ser colocado entre colchetes quando ele aparece dentro de uma lista de parâmetros de tipo. As regras para pesquisar assemblies para tipos qualificados e não qualificados em listas de parâmetros de tipo são as mesmas que as regras para tipos não qualificados e não qualificados não qualificados.
Tipos anuláveis são um caso especial de tipos genéricos. Por exemplo, uma anulável Int32 é representada pela cadeia de caracteres "System.Nullable'1[System.Int32]".
Observação
Você também pode obter tipos anuláveis usando operadores de tipo. Por exemplo, o tipo que permite valor nulo Boolean é retornado por typeof(Nullable<bool>) C# e no GetType(Nullable(Of Boolean)) Visual Basic.
A tabela a seguir mostra a sintaxe com GetType a qual você usa para vários tipos.
| Para obter | Utilização |
|---|---|
| Uma anulável Int32 | Type.GetType("System.Nullable`1[System.Int32]") |
Um ponteiro não gerenciado para MyType |
Type.GetType("MyType*") |
Um ponteiro não gerenciado para um ponteiro para MyType |
Type.GetType("MyType**") |
Um ponteiro gerenciado ou uma referência a MyType |
Type.GetType("MyType&"). Observe que, ao contrário dos ponteiros, as referências são limitadas a um nível. |
| Uma classe pai e uma classe aninhada | Type.GetType("MyParentClass+MyNestedClass") |
| Uma matriz unidimensional com um limite inferior de 0 | Type.GetType("MyArray[]") |
| Uma matriz unidimensional com um limite inferior desconhecido | Type.GetType("MyArray[*]") |
| Uma matriz ndimensional | Uma vírgula (,) dentro dos colchetes um total de n-1 vezes. Por exemplo, System.Object[,,] representa uma matriz tridimensional Object . |
| Uma matriz bidimensional | Type.GetType("MyArray[][]") |
| Uma matriz bidimensional retangular com limites inferiores desconhecidos | Type.GetType("MyArray[,]") |
| Um tipo genérico com um argumento de tipo | Type.GetType("MyGenericType`1[MyType]") |
| Um tipo genérico com dois argumentos de tipo | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
| Um tipo genérico com dois argumentos de tipo qualificados para assembly | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
| Um tipo genérico qualificado por assembly com um argumento de tipo qualificado para assembly | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly") |
| Um tipo genérico cujo argumento de tipo é um tipo genérico com dois argumentos de tipo | Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]") |
Confira também
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Especificando nomes de tipo totalmente qualificados
Aplica-se a
GetType(String, Boolean, Boolean)
- Origem:
- Type.CoreCLR.cs
- Origem:
- Type.CoreCLR.cs
- Origem:
- Type.CoreCLR.cs
- Origem:
- Type.CoreCLR.cs
- Origem:
- Type.CoreCLR.cs
Obtém o Type nome com o nome especificado, especificando se uma exceção será gerada se o tipo não for encontrado e se deseja executar uma pesquisa que diferencia maiúsculas de minúsculas.
public:
static Type ^ GetType(System::String ^ typeName, bool throwOnError, bool ignoreCase);
public static Type GetType(string typeName, bool throwOnError, bool ignoreCase);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName, bool throwOnError, bool ignoreCase);
public static Type? GetType(string typeName, bool throwOnError, bool ignoreCase);
static member GetType : string * bool * bool -> Type
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * bool * bool -> Type
Public Shared Function GetType (typeName As String, throwOnError As Boolean, ignoreCase As Boolean) As Type
Parâmetros
- typeName
- String
O nome qualificado do assembly do tipo a ser obtido. Consulte AssemblyQualifiedName. Se o tipo estiver no assembly em execução no momento ou em mscorlib.dll/System.Private.CoreLib.dll, será suficiente fornecer o nome do tipo qualificado por seu namespace.
- throwOnError
- Boolean
true para gerar uma exceção se o tipo não puder ser encontrado; false para retornar null. Especificar false também suprime algumas outras condições de exceção, mas não todas elas. Consulte a seção Exceções.
- ignoreCase
- Boolean
true para executar uma pesquisa typeNameque não diferencia maiúsculas de minúsculas, false para executar uma pesquisa typeNameque diferencia maiúsculas de minúsculas.
Retornos
O tipo com o nome especificado. Se o tipo não for encontrado, o throwOnError parâmetro especifica se null é retornado ou uma exceção é gerada. Em alguns casos, uma exceção é gerada independentemente do valor de throwOnError. Consulte a seção Exceções.
- Atributos
Exceções
typeName é null.
Um inicializador de classe é invocado e gera uma exceção.
throwOnError é true e o tipo não foi encontrado.
- ou -
throwOnError é true e typeName contém caracteres inválidos, como uma guia inserida.
- ou -
throwOnError é true e typeName é uma cadeia de caracteres vazia.
- ou -
throwOnError é true e typeName representa um tipo de matriz com um tamanho inválido.
- ou -
typeName representa uma matriz de TypedReference.
throwOnError é true e typeName contém sintaxe inválida. Por exemplo, "MyType[,*,]".
- ou -
typeName representa um tipo genérico que tem um tipo de ponteiro, um ByRef tipo ou Void como um de seus argumentos de tipo.
- ou -
typeName representa um tipo genérico que tem um número incorreto de argumentos de tipo.
- ou -
typeName representa um tipo genérico e um de seus argumentos de tipo não atende às restrições para o parâmetro de tipo correspondente.
throwOnError é true e o assembly ou uma de suas dependências não foi encontrado.
O assembly ou uma de suas dependências foi encontrado, mas não pôde ser carregado.
O assembly não é válido para o runtime carregado no momento.
Comentários
Você pode usar o GetType método para obter um Type objeto para um tipo em outro assembly se souber seu nome qualificado para assembly, que pode ser obtido de AssemblyQualifiedName.
GetType causa o carregamento do assembly especificado em typeName. Você também pode carregar um assembly usando o Assembly.Load método e, em seguida, usar o Assembly.GetType método ou Assembly.GetTypes para obter Type objetos. Se um tipo estiver em um assembly conhecido pelo programa em tempo de compilação, será mais eficiente usar typeof em C# ou no GetType operador no Visual Basic.
Somente .NET Framework: GetType só funciona em assemblies carregados do disco. Se você chamar GetType para pesquisar um tipo definido em um assembly dinâmico definido usando os System.Reflection.Emit serviços, você poderá obter um comportamento inconsistente. O comportamento depende se o assembly dinâmico é persistente, ou seja, criado usando os RunAndSave modos ou Save de acesso da System.Reflection.Emit.AssemblyBuilderAccess enumeração. Se o assembly dinâmico for persistente e tiver sido gravado no disco antes GetType de ser chamado, o carregador encontrará o assembly salvo no disco, carregará esse assembly e recuperará o tipo desse assembly. Se o assembly não tiver sido salvo no disco quando GetType for chamado, o método retornará null.
GetType não entende assemblies dinâmicos transitórios; portanto, a chamada GetType para recuperar um tipo em um assembly dinâmico transitório retorna null.
No .NET Framework, para usar GetType em um módulo dinâmico, assine o AppDomain.AssemblyResolve evento e chame GetType antes de salvar. Caso contrário, você obterá duas cópias do assembly na memória.
No .NET Core 3.0 e versões posteriores, as cargas de assembly disparadas por essa API são afetadas pelo valor atual de AssemblyLoadContext.CurrentContextualReflectionContext.
O throwOnError parâmetro especifica o que acontece quando o tipo não é encontrado e também suprime determinadas outras condições de exceção, conforme descrito na seção Exceções. Algumas exceções são geradas independentemente do valor de throwOnError. Por exemplo, se o tipo for encontrado, mas não puder ser carregado, um TypeLoadException será gerado mesmo se throwOnError for false.
A tabela a seguir mostra quais membros de uma classe base são retornados pelos métodos Get ao refletir sobre um tipo.
| Tipo de Membro | Estático | Não estático |
|---|---|---|
| Construtor | No | No |
| Campo | No | Sim. Um campo permanece sempre oculto por nome e assinatura. |
| Acontecimento | Não aplicável | A regra de sistema do tipo comum é que a herança é a mesma dos métodos que implementam a propriedade. A reflexão trata as propriedades como hide-by-name-and-signature. Veja a observação 2 abaixo. |
| Método | No | Sim. Um método (virtual e não virtual) pode permanecer oculto por nome ou por nome e assinatura. |
| Tipo aninhado | No | No |
| Propriedade | Não aplicável | A regra de sistema do tipo comum é que a herança é a mesma dos métodos que implementam a propriedade. A reflexão trata as propriedades como hide-by-name-and-signature. Veja a observação 2 abaixo. |
Oculto por nome e assinatura considera todas as partes da assinatura, inclusive modificadores personalizados, tipos de retorno, tipos de parâmetro, sentinelas e convenções de chamada não gerenciadas. Essa é uma comparação binária.
Para reflexão, propriedades e eventos permanecem ocultos por nome e assinatura. Se você tiver uma propriedade com um acessador get e um set na classe base, mas a classe derivada tiver apenas um acessador get, a propriedade de classe derivada ocultará a propriedade de classe base e você não poderá acessar o setter na classe base.
Atributos personalizados não fazem parte do sistema de tipos comuns.
Matrizes ou tipos COM não são pesquisados, a menos que já tenham sido carregados na tabela de classes disponíveis.
typeName pode ser o nome do tipo qualificado por seu namespace ou um nome qualificado para assembly que inclui uma especificação de nome de assembly. Consulte AssemblyQualifiedName.
Se typeName incluir o namespace, mas não o nome do assembly, esse método pesquisa apenas o assembly do objeto de chamada e mscorlib.dll/System.Private.CoreLib.dll, nessa ordem. Se typeName for totalmente qualificado com o nome do assembly parcial ou completo, esse método pesquisa no assembly especificado. Se o assembly tiver um nome forte, um nome de assembly completo será necessário.
A AssemblyQualifiedName propriedade retorna um nome de tipo totalmente qualificado, incluindo tipos aninhados, o nome do assembly e argumentos de tipo. Todos os compiladores que dão suporte ao common language runtime emitirão o nome simples de uma classe aninhada e a reflexão construirá um nome mutilado quando consultado, de acordo com as convenções a seguir.
Observação
A arquitetura do processador faz parte da identidade do assembly e pode ser especificada como parte das cadeias de caracteres de nome do assembly. Por exemplo, "ProcessorArchitecture=msil". No entanto, ela não está incluída na cadeia de caracteres retornada pela AssemblyQualifiedName propriedade, por motivos de compatibilidade. Você também pode carregar tipos criando um AssemblyName objeto e passando-o para uma sobrecarga apropriada do Load método. Em seguida, você pode usar o Assembly.GetType método para carregar tipos do assembly. Consulte também AssemblyName.ProcessorArchitecture.
| Delimitador | Meaning |
|---|---|
| Barra invertida (\) | Caractere de escape. |
| Backtick (') | Precede um ou mais dígitos que representam o número de parâmetros de tipo, localizados no final do nome de um tipo genérico. |
| Colchetes ([]) | Coloque uma lista de argumentos de tipo genérico para um tipo genérico construído; em uma lista de argumentos de tipo, coloque um tipo qualificado para assembly. |
| Vírgula (,) | Precede o nome do Assembly. |
| Período (.) | Denota identificadores de namespace. |
| Sinal de adição (+) | Precede uma classe aninhada. |
Por exemplo, o nome totalmente qualificado para uma classe pode ter esta aparência:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Se o namespace fosse TopNamespace.Sub+Namespace, a cadeia de caracteres teria que preceder o sinal de adição (+) com um caractere de escape (\) para impedir que ele fosse interpretado como um separador de aninhamento. A reflexão emite essa cadeia de caracteres da seguinte maneira:
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
Um "++" se torna "\+\+", e um "\" se torna "\\".
Esse nome qualificado pode ser persistido e usado posteriormente para carregar o Type. Para pesquisar e carregar um Type, use GetType apenas com o nome do tipo ou com o nome de tipo qualificado do assembly. GetType com o nome do tipo só procurará o Type assembly do chamador e, em seguida, no assembly do Sistema. GetType com o nome de tipo qualificado do assembly procurará em Type qualquer assembly.
Os nomes de tipo podem incluir caracteres à direita que denotam informações adicionais sobre o tipo, como se o tipo é um tipo de referência, um tipo de ponteiro ou um tipo de matriz. Para recuperar o nome do tipo sem esses caracteres à direita, use t.GetElementType().ToString(), onde t está o tipo.
Os espaços são relevantes em todos os componentes de nome de tipo, exceto no nome do assembly. No nome do assembly, os espaços antes do separador '', são relevantes, mas os espaços após o separador ''são ignorados.
O nome de um tipo genérico termina com um backtick (') seguido por dígitos que representam o número de argumentos de tipo genérico. A finalidade desse mangling de nome é permitir que os compiladores ofereçam suporte a tipos genéricos com o mesmo nome, mas com números diferentes de parâmetros de tipo, ocorrendo no mesmo escopo. Por exemplo, a reflexão retorna os nomes Tuple`1 mutilados e Tuple`2 dos métodos genéricos Tuple(Of T) e Tuple(Of T0, T1) no Visual Basic ou Tuple<T> no Tuple<T0, T1> Visual C#.
Para tipos genéricos, a lista de argumentos de tipo é entre colchetes e os argumentos de tipo são separados por vírgulas. Por exemplo, um genérico Dictionary<TKey,TValue> tem dois parâmetros de tipo. Uma Dictionary<TKey,TValue> das MyType chaves do tipo String pode ser representada da seguinte maneira:
System.Collections.Generic.Dictionary`2[System.String,MyType]
Para especificar um tipo qualificado por assembly dentro de uma lista de argumentos de tipo, coloque o tipo qualificado por assembly entre colchetes. Caso contrário, as vírgulas que separam as partes do nome qualificado para assembly são interpretadas como delimitando argumentos de tipo adicionais. Por exemplo, um Dictionary<TKey,TValue> de MyType MyAssembly.dll, com chaves do tipo String, pode ser especificado da seguinte maneira:
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
Observação
Um tipo qualificado por assembly só pode ser colocado entre colchetes quando ele aparece dentro de uma lista de parâmetros de tipo. As regras para pesquisar assemblies para tipos qualificados e não qualificados em listas de parâmetros de tipo são as mesmas que as regras para tipos não qualificados e não qualificados não qualificados.
Tipos anuláveis são um caso especial de tipos genéricos. Por exemplo, uma anulável Int32 é representada pela cadeia de caracteres "System.Nullable'1[System.Int32]".
Observação
Você também pode obter tipos anuláveis usando operadores de tipo. Por exemplo, o tipo que permite valor nulo Boolean é retornado por typeof(Nullable<bool>) C# e no GetType(Nullable(Of Boolean)) Visual Basic.
A tabela a seguir mostra a sintaxe com GetType a qual você usa para vários tipos.
| Para obter | Utilização |
|---|---|
| Uma anulável Int32 | Type.GetType("System.Nullable`1[System.Int32]") |
Um ponteiro não gerenciado para MyType |
Type.GetType("MyType*") |
Um ponteiro não gerenciado para um ponteiro para MyType |
Type.GetType("MyType**") |
Um ponteiro gerenciado ou uma referência a MyType |
Type.GetType("MyType&"). Observe que, ao contrário dos ponteiros, as referências são limitadas a um nível. |
| Uma classe pai e uma classe aninhada | Type.GetType("MyParentClass+MyNestedClass") |
| Uma matriz unidimensional com um limite inferior de 0 | Type.GetType("MyArray[]") |
| Uma matriz unidimensional com um limite inferior desconhecido | Type.GetType("MyArray[*]") |
| Uma matriz ndimensional | Uma vírgula (,) dentro dos colchetes um total de n-1 vezes. Por exemplo, System.Object[,,] representa uma matriz tridimensional Object . |
| Uma matriz bidimensional | Type.GetType("MyArray[][]") |
| Uma matriz bidimensional retangular com limites inferiores desconhecidos | Type.GetType("MyArray[,]") |
| Um tipo genérico com um argumento de tipo | Type.GetType("MyGenericType`1[MyType]") |
| Um tipo genérico com dois argumentos de tipo | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
| Um tipo genérico com dois argumentos de tipo qualificados para assembly | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
| Um tipo genérico qualificado por assembly com um argumento de tipo qualificado para assembly | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly") |
| Um tipo genérico cujo argumento de tipo é um tipo genérico com dois argumentos de tipo | Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]") |
Confira também
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Especificando nomes de tipo totalmente qualificados
Aplica-se a
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>)
- Origem:
- Type.CoreCLR.cs
- Origem:
- Type.CoreCLR.cs
- Origem:
- Type.CoreCLR.cs
- Origem:
- Type.CoreCLR.cs
- Origem:
- Type.CoreCLR.cs
Obtém o tipo com o nome especificado, opcionalmente fornecendo métodos personalizados para resolver o assembly e o tipo.
public:
static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::String ^, bool, Type ^> ^ typeResolver);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver);
public static Type GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly> assemblyResolver, Func<System.Reflection.Assembly,string,bool,Type> typeResolver);
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> -> Type
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> -> Type
Public Shared Function GetType (typeName As String, assemblyResolver As Func(Of AssemblyName, Assembly), typeResolver As Func(Of Assembly, String, Boolean, Type)) As Type
Parâmetros
- typeName
- String
O nome do tipo a ser obtido. Se o typeResolver parâmetro for fornecido, o nome do tipo poderá ser qualquer cadeia typeResolver de caracteres capaz de resolver. Se o assemblyResolver parâmetro for fornecido ou se a resolução de tipo padrão for usada, typeName deverá ser um nome qualificado para assembly (consulte AssemblyQualifiedName), a menos que o tipo esteja no assembly em execução no momento ou em mscorlib.dll/System.Private.CoreLib.dll, nesse caso, é suficiente fornecer o nome do tipo qualificado pelo namespace.
- assemblyResolver
- Func<AssemblyName,Assembly>
Um método que localiza e retorna o assembly especificado em typeName. O nome do assembly é passado como assemblyResolver um AssemblyName objeto. Se typeName não contiver o nome de um assembly, assemblyResolver não será chamado. Se assemblyResolver não for fornecido, a resolução de assembly padrão será executada.
Cuidado: não passe métodos de chamadores desconhecidos ou não confiáveis. Isso pode resultar em elevação de privilégio para código mal-intencionado. Use apenas os métodos que você fornece ou com os quais esteja familiarizado.
Um método que localiza e retorna o tipo especificado pelo typeName assembly que é retornado por assemblyResolver ou pela resolução de assembly padrão. Se nenhum assembly for fornecido, o typeResolver método poderá fornecer um. O método também usa um parâmetro que especifica se uma pesquisa não diferencia maiúsculas de minúsculas; false é passado para esse parâmetro.
Cuidado: não passe métodos de chamadores desconhecidos ou não confiáveis.
Retornos
O tipo com o nome especificado ou null se o tipo não for encontrado.
- Atributos
Exceções
typeName é null.
Um inicializador de classe é invocado e gera uma exceção.
Ocorre um erro quando typeName é analisado em um nome de tipo e um nome de assembly (por exemplo, quando o nome do tipo simples inclui um caractere especial sem escape).
- ou -
typeName representa um tipo genérico que tem um tipo de ponteiro, um ByRef tipo ou Void como um de seus argumentos de tipo.
- ou -
typeName representa um tipo genérico que tem um número incorreto de argumentos de tipo.
- ou -
typeName representa um tipo genérico e um de seus argumentos de tipo não atende às restrições para o parâmetro de tipo correspondente.
typeName representa um tipo inválido, por exemplo, uma matriz de TypedReference.
O assembly ou uma de suas dependências foi encontrado, mas não pôde ser carregado.
- ou -
typeName contém um nome de assembly inválido.
- ou -
typeName é um nome de assembly válido sem um nome de tipo.
O assembly ou uma de suas dependências não é válido para o runtime carregado no momento.
Comentários
Cenários de uso para esse método e detalhes sobre os assemblyResolver parâmetros e typeResolver podem ser encontrados na sobrecarga do GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) método.
Observação
Se typeName não for possível encontrar, a chamada para o GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) método retornará null. Ele não gera uma exceção. Para controlar se uma exceção é gerada, chame uma sobrecarga do GetType método que tem um throwOnError parâmetro.
Chamar essa sobrecarga de método é o mesmo que chamar a sobrecarga do GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) método e especificar false para os parâmetros eignoreCase.throwOnError
Aplica-se a
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean)
- Origem:
- Type.CoreCLR.cs
- Origem:
- Type.CoreCLR.cs
- Origem:
- Type.CoreCLR.cs
- Origem:
- Type.CoreCLR.cs
- Origem:
- Type.CoreCLR.cs
Obtém o tipo com o nome especificado, especificando se uma exceção será gerada se o tipo não for encontrado e, opcionalmente, fornecendo métodos personalizados para resolver o assembly e o tipo.
public:
static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::String ^, bool, Type ^> ^ typeResolver, bool throwOnError);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError);
public static Type GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly> assemblyResolver, Func<System.Reflection.Assembly,string,bool,Type> typeResolver, bool throwOnError);
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool -> Type
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool -> Type
Public Shared Function GetType (typeName As String, assemblyResolver As Func(Of AssemblyName, Assembly), typeResolver As Func(Of Assembly, String, Boolean, Type), throwOnError As Boolean) As Type
Parâmetros
- typeName
- String
O nome do tipo a ser obtido. Se o typeResolver parâmetro for fornecido, o nome do tipo poderá ser qualquer cadeia typeResolver de caracteres capaz de resolver. Se o assemblyResolver parâmetro for fornecido ou se a resolução de tipo padrão for usada, typeName deverá ser um nome qualificado para assembly (consulte AssemblyQualifiedName), a menos que o tipo esteja no assembly em execução no momento ou em mscorlib.dll/System.Private.CoreLib.dll, nesse caso, é suficiente fornecer o nome do tipo qualificado pelo namespace.
- assemblyResolver
- Func<AssemblyName,Assembly>
Um método que localiza e retorna o assembly especificado em typeName. O nome do assembly é passado como assemblyResolver um AssemblyName objeto. Se typeName não contiver o nome de um assembly, assemblyResolver não será chamado. Se assemblyResolver não for fornecido, a resolução de assembly padrão será executada.
Cuidado: não passe métodos de chamadores desconhecidos ou não confiáveis. Isso pode resultar em elevação de privilégio para código mal-intencionado. Use apenas os métodos que você fornece ou com os quais esteja familiarizado.
Um método que localiza e retorna o tipo especificado pelo typeName assembly que é retornado por assemblyResolver ou pela resolução de assembly padrão. Se nenhum assembly for fornecido, o método poderá fornecer um. O método também usa um parâmetro que especifica se uma pesquisa não diferencia maiúsculas de minúsculas; false é passado para esse parâmetro.
Cuidado: não passe métodos de chamadores desconhecidos ou não confiáveis.
- throwOnError
- Boolean
true para gerar uma exceção se o tipo não puder ser encontrado; false para retornar null. Especificar false também suprime algumas outras condições de exceção, mas não todas elas. Consulte a seção Exceções.
Retornos
O tipo com o nome especificado. Se o tipo não for encontrado, o throwOnError parâmetro especifica se null é retornado ou uma exceção é gerada. Em alguns casos, uma exceção é gerada independentemente do valor de throwOnError. Consulte a seção Exceções.
- Atributos
Exceções
typeName é null.
Um inicializador de classe é invocado e gera uma exceção.
throwOnError é true e o tipo não foi encontrado.
- ou -
throwOnError é true e typeName contém caracteres inválidos, como uma guia inserida.
- ou -
throwOnError é true e typeName é uma cadeia de caracteres vazia.
- ou -
throwOnError é true e typeName representa um tipo de matriz com um tamanho inválido.
- ou -
typeName representa uma matriz de TypedReference.
Ocorre um erro quando typeName é analisado em um nome de tipo e um nome de assembly (por exemplo, quando o nome do tipo simples inclui um caractere especial sem escape).
- ou -
throwOnError é true e typeName contém sintaxe inválida (por exemplo, "MyType[,*,]").
- ou -
typeName representa um tipo genérico que tem um tipo de ponteiro, um ByRef tipo ou Void como um de seus argumentos de tipo.
- ou -
typeName representa um tipo genérico que tem um número incorreto de argumentos de tipo.
- ou -
typeName representa um tipo genérico e um de seus argumentos de tipo não atende às restrições para o parâmetro de tipo correspondente.
throwOnError é true e o assembly ou uma de suas dependências não foi encontrado.
- ou -
typeName contém um nome de assembly inválido.
- ou -
typeName é um nome de assembly válido sem um nome de tipo.
O assembly ou uma de suas dependências foi encontrado, mas não pôde ser carregado.
O assembly ou uma de suas dependências não é válido para o runtime carregado no momento.
Comentários
Cenários de uso para esse método e detalhes sobre os assemblyResolver parâmetros e typeResolver podem ser encontrados na sobrecarga do GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) método.
Chamar essa sobrecarga de método é o mesmo que chamar a sobrecarga do GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) método e especificar false para o ignoreCase parâmetro.