Type.GetType Método

Definição

Obtém um objeto Type que representa o tipo especificado.

Sobrecargas

GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean)

Obtém o tipo com o nome definido, especificando se uma pesquisa que diferencia maiúsculas de minúsculas deverá ser realizada e se uma exceção deverá ser gerada se o tipo não for encontrado, com a opção de também fornecer métodos personalizados para resolver o assembly e o tipo.

GetType()

Obtém o Type atual.

GetType(String)

Obtém o Type com o nome especificado, com a execução de uma pesquisa que diferencia maiúsculas de minúsculas.

GetType(String, Boolean)

Obtém o Type com o nome especificado, realizando uma pesquisa que diferencia minúsculas e maiúsculas e especificando se deve ou não lançar uma exceção se o tipo não for encontrado.

GetType(String, Boolean, Boolean)

Obtém o Type com o nome especificado, especificando se deve ou não lançar uma exceção se o tipo não for encontrado e se deseja executar uma pesquisa diferenciando maiúsculas de minúsculas.

GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>)

Obtém o tipo com o nome especificado, fornecendo opcionalmente 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 definido, especificando se deverá ser lançada uma exceção 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

Obtém o tipo com o nome definido, especificando se uma pesquisa que diferencia maiúsculas de minúsculas deverá ser realizada e se uma exceção deverá ser gerada se o tipo não for encontrado, com a opção de também 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);
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);
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 parâmetro typeResolver for fornecido, o nome do tipo poderá ser qualquer cadeia de caracteres que typeResolver possa 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 de tipo qualificado por seu namespace.

assemblyResolver
Func<AssemblyName,Assembly>

Um método que localiza e retorna o assembly especificado em typeName. O nome do assembly é passado para assemblyResolver como um objeto AssemblyName. Se typeName não contiver o nome de um assembly, o assemblyResolver não será chamado. Se o assemblyResolver não for fornecido, será executada a resolução de assembly padrão.

Cuidado: não passe métodos de chamadores desconhecidos ou não confiáveis. Isso poderá resultar na elevação de privilégio de código mal-intencionado. Use apenas métodos fornecidos por você ou com os quais esteja familiarizado.

typeResolver
Func<Assembly,String,Boolean,Type>

Um método que localiza e retorna o tipo especificado por typeName do assembly que é retornado pelo assemblyResolver ou pela resolução de assembly padrão. Se nenhum assembly for indicado, o método poderá fornecer um. O método também utiliza um parâmetro que especifica se deve executar uma pesquisa que 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 não for possível encontrar o tipo; false para retornar null. A especificação de false também suprime algumas condições de exceção, mas não todas. Consulte a seção Exceções.

ignoreCase
Boolean

true para executar uma pesquisa que diferencia maiúsculas de minúsculas para typeName, false para realizar uma pesquisa que diferencia maiúsculas de minúsculas para typeName.

Retornos

O tipo com o nome especificado. Caso o tipo não seja encontrado, o parâmetro throwOnError especifica se null é retornado ou uma exceção é lançada. Em alguns casos, uma exceção é lançada independentemente do valor de throwOnError. Consulte a seção Exceções.

Exceções

typeName é null.

Um inicializador de classe é invocado e lança 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 tenha um tipo de ponteiro, um tipo ByRef ou Void como um dos 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 dos argumentos de tipo não atende às restrições do 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 foi possível carregá-lo.

- 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

Para obter mais informações sobre essa API, consulte Comentários de API complementares para Type.GetType.

Aplica-se a

GetType()

Origem:
Type.cs
Origem:
Type.cs
Origem:
Type.cs

Obtém o Type atual.

public:
 Type ^ GetType();
public:
 virtual Type ^ GetType();
public Type GetType ();
override this.GetType : unit -> Type
Public Function GetType () As Type

Retornos

O Type atual.

Implementações

Exceções

Um inicializador de classe é invocado e lança uma exceção.

Confira também

Aplica-se a

GetType(String)

Origem:
Type.CoreCLR.cs
Origem:
Type.CoreCLR.cs
Origem:
Type.CoreCLR.cs

Obtém o Type com o nome especificado, com a execução de uma pesquisa que diferencia maiúsculas de minúsculas.

public:
 static Type ^ GetType(System::String ^ typeName);
public static Type GetType (string typeName);
public static Type? GetType (string typeName);
static member GetType : string -> Type
Public Shared Function GetType (typeName As String) As Type

Parâmetros

typeName
String

O nome qualificado pelo 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 de tipo qualificado por seu namespace.

Retornos

O tipo com o nome especificado, se for encontrado; caso contrário, null.

Exceções

typeName é null.

Um inicializador de classe é invocado e lança uma exceção.

typeName representa um tipo genérico que tem um tipo de ponteiro, um tipo ByRef ou Void como um dos 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 dos argumentos de tipo não atende às restrições do 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 foi possível carregá-lo.

Observação: no .NET para aplicativos da Windows Store ou na Biblioteca de Classes Portátil, capture a exceção de classe base, IOException, em vez disso.

O assembly não é válido para o runtime carregado no momento.

Exemplos

O exemplo a seguir recupera o tipo de System.Int32 e usa esse tipo de objeto para exibir a FullName propriedade de System.Int32.

using namespace System;

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

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, poderá obter um comportamento inconsistente. O comportamento depende se o assembly dinâmico é persistente, ou seja, criado usando os RunAndSave modos de acesso ou Save 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, chamar GetType para recuperar um tipo em um assembly dinâmico transitório retorna null.

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.

A tabela a seguir mostra quais membros de uma classe base são retornados pelos métodos Get durante a reflexão em um tipo.

Tipo do membro Estático Não estático
Construtor Não Não
Campo Não Sim. Um campo permanece sempre oculto por nome e assinatura.
Evento Não aplicável A regra de sistema do tipo comum é que a herança é a mesma dos métodos que implementam a propriedade. Reflexão trata propriedades como ocultas por nome e assinatura. Consulte a observação 2 abaixo.
Método Não Sim. Um método (virtual e não virtual) pode permanecer oculto por nome ou por nome e assinatura.
Tipo aninhado Não Não
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. Reflexão trata propriedades como ocultas por nome e assinatura. Consulte 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. Esta é 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 set na classe base, mas a classe derivada tiver apenas um acessador get, a propriedade de classe derivada ocultará a propriedade da classe base e você não poderá acessar o setter na classe base.

  3. Atributos personalizados não fazem parte do sistema de tipo comum.

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 por 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 pesquisará 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 pesquisará 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 reflexão constrói um nome danificado 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, ele não está incluído 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 Significado
Barra invertida (\) Caractere de escape.
Acento grave (') 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 por assembly.
Vírgula (,) Precede o nome Assembly.
Ponto final (.) Denota identificadores de namespace.
Sinal de adição (+) Precede uma classe aninhada.

Por exemplo, o nome totalmente qualificado para uma classe pode ser semelhante a:

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 evitar 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 "++" torna-se "\+\+" e um "\" torna-se "\\".

Este nome qualificado pode ser mantido e posteriormente usado para carregar o Type. Para procurar e carregar Type, use GetType apenas com o nome do tipo ou com o nome do tipo qualificado do assembly. GetType com o nome do tipo procurará apenas o Type no assembly do chamador e, em seguida, no assembly Sistema. GetType com o nome de tipo qualificado do assembly procurará o Type em qualquer assembly.

Nomes de tipo podem incluir caracteres à direita que denotam informações adicionais sobre o tipo, como se o tipo é um tipo de referência, ponteiro ou matriz. Para recuperar o nome do tipo sem esses caracteres à direita, use t.GetElementType().ToString(), em que t é o tipo.

Espaços são relevantes em todos os componentes de nome do tipo, exceto o nome do assembly. No nome do assembly, espaços antes do separador ',' são relevantes, mas espaços depois do separador ',' são ignorados.

O nome de um tipo genérico termina com um acento grave (') seguido por dígitos que representam o número de argumentos de tipo genérico. A finalidade desse 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, 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> e Tuple<T0, T1> no Visual C#.

Para tipos genéricos, a lista de argumentos de tipo é colocada 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. Um Dictionary<TKey,TValue> de MyType com chaves do tipo String pode ser representado da seguinte maneira:

System.Collections.Generic.Dictionary`2[System.String,MyType]

Para especificar um tipo qualificado por assembly em 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 por assembly são interpretadas como delimitando argumentos de tipo adicionais. Por exemplo, um Dictionary<TKey,TValue> de 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 em 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 geral qualificados e 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

Em C#, C++e Visual Basic, você também pode obter tipos anuláveis usando operadores de tipo. Por exemplo, o tipo que permite Boolean valor nulo é retornado por typeof(Nullable<bool>) em C#, por Nullable<Boolean>::typeid em C++e por GetType(Nullable(Of Boolean)) no Visual Basic.

A tabela a seguir mostra a sintaxe com GetType a qual você usa para vários tipos.

Para obter Uso
Um valor 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 qualificado por assembly Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]")
Um tipo genérico qualificado por assembly com um argumento de tipo qualificado por 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

Obtém o Type com o nome especificado, realizando uma pesquisa que diferencia minúsculas e maiúsculas e especificando se deve ou não lançar uma exceção se o tipo não for encontrado.

public:
 static Type ^ GetType(System::String ^ typeName, bool throwOnError);
public static Type GetType (string typeName, bool throwOnError);
public static Type? GetType (string typeName, bool throwOnError);
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 pelo 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 não for possível encontrar o tipo; false para retornar null. A especificação de false também suprime algumas condições de exceção, mas não todas. Consulte a seção Exceções.

Retornos

O tipo com o nome especificado. Caso o tipo não seja encontrado, o parâmetro throwOnError especifica se null é retornado ou uma exceção é lançada. Em alguns casos, uma exceção é lançada independentemente do valor de throwOnError. Consulte a seção Exceções.

Exceções

typeName é null.

Um inicializador de classe é invocado e lança 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 tenha um tipo de ponteiro, um tipo ByRef ou Void como um dos 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 dos argumentos de tipo não atende às restrições do 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 foi possível carregá-lo.

Observação: no .NET para aplicativos da Windows Store ou na Biblioteca de Classes Portátil, capture a exceção de classe base, IOException, em 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 de System.Int32 e 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 namespace System;

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

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, poderá obter um comportamento inconsistente. O comportamento depende se o assembly dinâmico é persistente, ou seja, criado usando os RunAndSave modos de acesso ou Save 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, chamar GetType para recuperar um tipo em um assembly dinâmico transitório retorna null.

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.

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 durante a reflexão em um tipo.

Tipo do membro Estático Não estático
Construtor Não Não
Campo Não Sim. Um campo permanece sempre oculto por nome e assinatura.
Evento Não aplicável A regra de sistema do tipo comum é que a herança é a mesma dos métodos que implementam a propriedade. Reflexão trata propriedades como ocultas por nome e assinatura. Consulte a observação 2 abaixo.
Método Não Sim. Um método (virtual e não virtual) pode permanecer oculto por nome ou por nome e assinatura.
Tipo aninhado Não Não
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. Reflexão trata propriedades como ocultas por nome e assinatura. Consulte 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. Esta é 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 set na classe base, mas a classe derivada tiver apenas um acessador get, a propriedade de classe derivada ocultará a propriedade da classe base e você não poderá acessar o setter na classe base.

  3. Atributos personalizados não fazem parte do sistema de tipo comum.

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 por 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 será pesquisado 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 reflexão constrói um nome danificado 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, ele não está incluído 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 Significado
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; dentro de uma lista de argumentos de tipo, coloque um tipo qualificado para assembly.
Vírgula (,) Precede o nome Assembly.
Ponto final (.) Denota identificadores de namespace.
Sinal de adição (+) Precede uma classe aninhada.

Por exemplo, o nome totalmente qualificado para uma classe pode ser semelhante a:

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. Reflection emite essa cadeia de caracteres da seguinte maneira:

TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly

Um "++" torna-se "\+\+" e um "\" torna-se "\\".

Este nome qualificado pode ser mantido e posteriormente usado para carregar o Type. Para procurar e carregar Type, use GetType apenas com o nome do tipo ou com o nome do tipo qualificado do assembly. GetType com o nome do tipo procurará apenas o Type no assembly do chamador e, em seguida, no assembly Sistema. GetType com o nome de tipo qualificado do assembly procurará o Type em qualquer assembly.

Nomes de tipo podem incluir caracteres à direita que denotam informações adicionais sobre o tipo, como se o tipo é um tipo de referência, ponteiro ou matriz. Para recuperar o nome do tipo sem esses caracteres à direita, use t.GetElementType().ToString(), em que t é o tipo.

Espaços são relevantes em todos os componentes de nome do tipo, exceto o nome do assembly. No nome do assembly, espaços antes do separador ',' são relevantes, mas espaços depois do 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, 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> e Tuple<T0, T1> no Visual C#.

Para tipos genéricos, a lista de argumentos de tipo é colocada 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. Um Dictionary<TKey,TValue> de MyType com chaves do tipo String pode ser representado da seguinte maneira:

System.Collections.Generic.Dictionary`2[System.String,MyType]

Para especificar um tipo qualificado para assembly em 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 por assembly são interpretadas como delimitando argumentos de tipo adicionais. Por exemplo, um Dictionary<TKey,TValue> de MyType de 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 em 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.

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

Em C#, C++e Visual Basic, você também pode obter tipos anuláveis usando operadores de tipo. Por exemplo, o tipo anulável Boolean é retornado por typeof(Nullable<bool>) em C#, por Nullable<Boolean>::typeid em C++e por GetType(Nullable(Of Boolean)) no Visual Basic.

A tabela a seguir mostra a sintaxe que você usa com GetType para vários tipos.

Para Obter Uso
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 .
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 qualificado por assembly Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]")
Um tipo genérico qualificado para 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

Obtém o Type com o nome especificado, especificando se deve ou não lançar uma exceção se o tipo não for encontrado e se deseja executar uma pesquisa diferenciando 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);
public static Type? GetType (string typeName, bool throwOnError, bool ignoreCase);
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 pelo 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 de tipo qualificado por seu namespace.

throwOnError
Boolean

true para gerar uma exceção se não for possível encontrar o tipo; false para retornar null. A especificação de false também suprime algumas condições de exceção, mas não todas. Consulte a seção Exceções.

ignoreCase
Boolean

true para executar uma pesquisa que diferencia maiúsculas de minúsculas para typeName, false para realizar uma pesquisa que diferencia maiúsculas de minúsculas para typeName.

Retornos

O tipo com o nome especificado. Caso o tipo não seja encontrado, o parâmetro throwOnError especifica se null é retornado ou uma exceção é lançada. Em alguns casos, uma exceção é lançada independentemente do valor de throwOnError. Consulte a seção Exceções.

Exceções

typeName é null.

Um inicializador de classe é invocado e lança 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 tenha um tipo de ponteiro, um tipo ByRef ou Void como um dos 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 dos argumentos de tipo não atende às restrições do 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 foi possível carregá-lo.

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.

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, poderá obter um comportamento inconsistente. O comportamento depende se o assembly dinâmico é persistente, ou seja, criado usando os RunAndSave modos de acesso ou Save 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, chamar GetType para recuperar um tipo em um assembly dinâmico transitório retorna null.

Para usar GetType em um módulo dinâmico, assine o AppDomain.AssemblyResolve evento e chame GetType antes de salvar. Caso contrário, você receberá duas cópias do assembly na memória.

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 durante a reflexão em um tipo.

Tipo do membro Estático Não estático
Construtor Não Não
Campo Não Sim. Um campo permanece sempre oculto por nome e assinatura.
Evento Não aplicável A regra de sistema do tipo comum é que a herança é a mesma dos métodos que implementam a propriedade. Reflexão trata propriedades como ocultas por nome e assinatura. Consulte a observação 2 abaixo.
Método Não Sim. Um método (virtual e não virtual) pode permanecer oculto por nome ou por nome e assinatura.
Tipo aninhado Não Não
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. Reflexão trata propriedades como ocultas por nome e assinatura. Consulte 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. Esta é 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 set na classe base, mas a classe derivada tiver apenas um acessador get, a propriedade de classe derivada ocultará a propriedade da classe base e você não poderá acessar o setter na classe base.

  3. Atributos personalizados não fazem parte do sistema de tipo comum.

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 será pesquisado 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 reflexão constrói um nome danificado 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, ele não está incluído 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 Significado
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; dentro de uma lista de argumentos de tipo, coloque um tipo qualificado para assembly.
Vírgula (,) Precede o nome Assembly.
Ponto final (.) Denota identificadores de namespace.
Sinal de adição (+) Precede uma classe aninhada.

Por exemplo, o nome totalmente qualificado para uma classe pode ser semelhante a:

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. Reflection emite essa cadeia de caracteres da seguinte maneira:

TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly

Um "++" torna-se "\+\+" e um "\" torna-se "\\".

Este nome qualificado pode ser mantido e posteriormente usado para carregar o Type. Para procurar e carregar Type, use GetType apenas com o nome do tipo ou com o nome do tipo qualificado do assembly. GetType com o nome do tipo procurará apenas o Type no assembly do chamador e, em seguida, no assembly Sistema. GetType com o nome de tipo qualificado do assembly procurará o Type em qualquer assembly.

Nomes de tipo podem incluir caracteres à direita que denotam informações adicionais sobre o tipo, como se o tipo é um tipo de referência, ponteiro ou matriz. Para recuperar o nome do tipo sem esses caracteres à direita, use t.GetElementType().ToString(), em que t é o tipo.

Espaços são relevantes em todos os componentes de nome do tipo, exceto o nome do assembly. No nome do assembly, espaços antes do separador ',' são relevantes, mas espaços depois do 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, 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> e Tuple<T0, T1> no Visual C#.

Para tipos genéricos, a lista de argumentos de tipo é colocada 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. Um Dictionary<TKey,TValue> de MyType com chaves do tipo String pode ser representado da seguinte maneira:

System.Collections.Generic.Dictionary`2[System.String,MyType]

Para especificar um tipo qualificado para assembly em 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 por assembly são interpretadas como delimitando argumentos de tipo adicionais. Por exemplo, um Dictionary<TKey,TValue> de MyType de 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 em 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.

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

Em C#, C++e Visual Basic, você também pode obter tipos anuláveis usando operadores de tipo. Por exemplo, o tipo anulável Boolean é retornado por typeof(Nullable<bool>) em C#, por Nullable<Boolean>::typeid em C++e por GetType(Nullable(Of Boolean)) no Visual Basic.

A tabela a seguir mostra a sintaxe que você usa com GetType para vários tipos.

Para Obter Uso
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 .
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 qualificado por assembly Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]")
Um tipo genérico qualificado para 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

Obtém o tipo com o nome especificado, fornecendo opcionalmente 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);
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);
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 parâmetro typeResolver for fornecido, o nome do tipo poderá ser qualquer cadeia de caracteres que typeResolver possa 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 de tipo qualificado por seu namespace.

assemblyResolver
Func<AssemblyName,Assembly>

Um método que localiza e retorna o assembly especificado em typeName. O nome do assembly é passado para assemblyResolver como um objeto AssemblyName. Se typeName não contiver o nome de um assembly, o assemblyResolver não será chamado. Se o assemblyResolver não for fornecido, será executada a resolução de assembly padrão.

Cuidado: não passe métodos de chamadores desconhecidos ou não confiáveis. Isso poderá resultar na elevação de privilégio de código mal-intencionado. Use apenas métodos fornecidos por você ou com os quais esteja familiarizado.

typeResolver
Func<Assembly,String,Boolean,Type>

Um método que localiza e retorna o tipo especificado pelo typeName do assembly que é retornado pelo assemblyResolver ou pela resolução de assembly padrão. Se nenhum assembly for fornecido, o método typeResolver poderá fornecer um. O método também utiliza um parâmetro que especifica se deve ser executada uma pesquisa que 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.

Exceções

typeName é null.

Um inicializador de classe é invocado e lança 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 tenha um tipo de ponteiro, um tipo ByRef ou Void como um dos 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 dos argumentos de tipo não atende às restrições do 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 foi possível carregá-lo.

- 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 throwOnError parâmetros e ignoreCase .

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

Obtém o tipo com o nome definido, especificando se deverá ser lançada uma exceção 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);
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);
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 parâmetro typeResolver for fornecido, o nome do tipo poderá ser qualquer cadeia de caracteres que typeResolver possa 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 de tipo qualificado por seu namespace.

assemblyResolver
Func<AssemblyName,Assembly>

Um método que localiza e retorna o assembly especificado em typeName. O nome do assembly é passado para assemblyResolver como um objeto AssemblyName. Se typeName não contiver o nome de um assembly, o assemblyResolver não será chamado. Se o assemblyResolver não for fornecido, será executada a resolução de assembly padrão.

Cuidado: não passe métodos de chamadores desconhecidos ou não confiáveis. Isso poderá resultar na elevação de privilégio de código mal-intencionado. Use apenas métodos fornecidos por você ou com os quais esteja familiarizado.

typeResolver
Func<Assembly,String,Boolean,Type>

Um método que localiza e retorna o tipo especificado por typeName do assembly que é retornado pelo assemblyResolver ou pela resolução de assembly padrão. Se nenhum assembly for indicado, o método poderá fornecer um. O método também utiliza um parâmetro que especifica se deve ser executada uma pesquisa que 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 não for possível encontrar o tipo; false para retornar null. A especificação de false também suprime algumas condições de exceção, mas não todas. Consulte a seção Exceções.

Retornos

O tipo com o nome especificado. Caso o tipo não seja encontrado, o parâmetro throwOnError especifica se null é retornado ou uma exceção é lançada. Em alguns casos, uma exceção é lançada independentemente do valor de throwOnError. Consulte a seção Exceções.

Exceções

typeName é null.

Um inicializador de classe é invocado e lança 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 tenha um tipo de ponteiro, um tipo ByRef ou Void como um dos 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 dos argumentos de tipo não atende às restrições do 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 foi possível carregá-lo.

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