Partilhar via


Type.GetType Método

Definição

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.

typeResolver
Func<Assembly,String,Boolean,Type>

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.
  1. 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.

  2. 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.

  3. 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

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.
  1. 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.

  2. 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.

  3. 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

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.
  1. 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.

  2. 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.

  3. 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

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.

typeResolver
Func<Assembly,String,Boolean,Type>

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.

typeResolver
Func<Assembly,String,Boolean,Type>

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.

Aplica-se a