Type.GetType Método

Definição

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

Sobrecargas

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

Obtém o tipo com o nome especificado, especificando se deve realizar uma pesquisa sensível a maiúsculas de minúsculas e se deve lançar uma exceção caso o tipo não seja encontrado, e opcionalmente fornece métodos personalizados para resolver a montagem e o tipo.

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

Obtém o tipo com o nome especificado, especificando se deve lançar uma exceção caso o tipo não seja encontrado, e opcionalmente fornece métodos personalizados para resolver a montagem e o tipo.

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 a montagem e o tipo.

GetType()

Obtém a corrente Type.

GetType(String, Boolean)

Obtém-se Type com o nome especificado, realizando uma pesquisa sensível a maiúsculas minúsculas e especificando se deve lançar uma exceção caso o tipo não seja encontrado.

GetType(String)

Obtém-se Type com o nome especificado, realizando uma pesquisa sensível a maiúsculas minúsculas.

GetType(String, Boolean, Boolean)

Obtém o Type com o nome especificado, especificando se deve lançar uma exceção caso o tipo não seja encontrado e se deve realizar uma pesquisa sensível a maiúsculas e minúsculas.

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

Obtém o tipo com o nome especificado, especificando se deve realizar uma pesquisa sensível a maiúsculas de minúsculas e se deve lançar uma exceção caso o tipo não seja encontrado, e opcionalmente fornece métodos personalizados para resolver a montagem 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);
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 obter. Se o typeResolver parâmetro for fornecido, o nome do tipo pode ser qualquer cadeia capaz typeResolver de resolver. Se o assemblyResolver parâmetro for fornecido ou se for usada resolução de tipo padrão, typeName deve ser um nome qualificado pelo conjunto (ver AssemblyQualifiedName), a menos que o tipo esteja no conjunto atualmente em execução ou em mscorlib.dll/System.Private.CoreLib.dll, caso em que é suficiente fornecer o nome do tipo qualificado pelo seu espaço de nomes.

assemblyResolver
Func<AssemblyName,Assembly>

Um método que localiza e devolve a montagem especificada em typeName. O nome da assembleia é passado como assemblyResolver um AssemblyName objeto. Se typeName não contiver o nome de uma assembleia, assemblyResolver não é chamado. Se assemblyResolver não for fornecida, é realizada a resolução padrão de montagem.

Atenção: Não passe métodos de chamadas desconhecidas ou não confiáveis. Fazê-lo pode resultar na elevação de privilégios para código malicioso. Use apenas os métodos fornecidos ou com os quais esteja familiarizado.

typeResolver
Func<Assembly,String,Boolean,Type>

Um método que localiza e devolve o tipo especificado por typeName a partir da montagem que é retornada por assemblyResolver ou pela resolução padrão da assembleia. Se não for fornecido montagem, o método pode fornecer uma. O método também utiliza um parâmetro que especifica se deve ser realizada uma pesquisa insensível a maiúsculas e minúsculas; o valor de ignoreCase é passado para esse parâmetro.

Atenção: Não passe métodos de chamadas desconhecidas ou não confiáveis.

throwOnError
Boolean

true lançar uma exceção se o tipo não puder ser encontrado; false para regressar null. Especificar false também suprime algumas outras condições de exceção, mas não todas. Veja a secção de Exceções.

ignoreCase
Boolean

true para realizar uma pesquisa insensível a maiúsculos e maiúsculos para typeName, false para realizar uma pesquisa sensível a maiúsculas e minúsculas para typeName.

Devoluções

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

Exceções

typeName é null.

É invocado um inicializador de classe que lança uma exceção.

throwOnError é true e o tipo não é encontrado.

-ou-

throwOnError é true e typeName contém caracteres inválidos, como um separador embutido.

-ou-

throwOnError é true e typeName é uma cadeia vazia.

-ou-

throwOnError é true e typeName representa um tipo de array com tamanho inválido.

-ou-

typeName representa um array de TypedReference.

Ocorre um erro quando typeName é analisado num nome de tipo e num nome de montagem (por exemplo, quando o nome do tipo simples inclui um carácter especial não escapado).

-ou-

throwOnError é true e typeName contém sintaxe inválida (por exemplo, "MyType[,*,]").

-ou-

typeName representa um tipo genérico que tem um tipo apontador, um ByRef tipo, ou Void como um dos 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 dos seus argumentos de tipo não satisfaz as restrições para o parâmetro de tipo correspondente.

throwOnError is true e a assembly ou uma das suas dependências não foi encontrada.

A montagem ou uma das suas dependências foi encontrada, mas não pôde ser carregada.

-ou-

typeName contém um nome assembly inválido.

-ou-

typeName é um nome de assembleia válido sem nome de tipo.

A assembly ou uma das suas dependências não é uma assembly válida para o runtime atualmente carregado.

Observações

No .NET Core 3.0 e versões posteriores, se assemblyResolver for nulo, então as cargas de montagem desencadeadas por esta API são afetadas pelo valor atual de AssemblyLoadContext.CurrentContextualReflectionContext.

Para mais informações sobre esta API, consulte Observações suplementares da API para o Type.GetType.

Aplica-se a

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

Obtém o tipo com o nome especificado, especificando se deve lançar uma exceção caso o tipo não seja encontrado, e opcionalmente fornece métodos personalizados para resolver a montagem 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);
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 obter. Se o typeResolver parâmetro for fornecido, o nome do tipo pode ser qualquer cadeia capaz typeResolver de resolver. Se o assemblyResolver parâmetro for fornecido ou se for usada resolução de tipo padrão, typeName deve ser um nome qualificado pelo conjunto (ver AssemblyQualifiedName), a menos que o tipo esteja no conjunto atualmente em execução ou em mscorlib.dll/System.Private.CoreLib.dll, caso em que é suficiente fornecer o nome do tipo qualificado pelo seu espaço de nomes.

assemblyResolver
Func<AssemblyName,Assembly>

Um método que localiza e devolve a montagem especificada em typeName. O nome da assembleia é passado como assemblyResolver um AssemblyName objeto. Se typeName não contiver o nome de uma assembleia, assemblyResolver não é chamado. Se assemblyResolver não for fornecida, é realizada a resolução padrão de montagem.

Atenção: Não passe métodos de chamadas desconhecidas ou não confiáveis. Fazê-lo pode resultar na elevação de privilégios para código malicioso. Use apenas os métodos fornecidos ou com os quais esteja familiarizado.

typeResolver
Func<Assembly,String,Boolean,Type>

Um método que localiza e devolve o tipo especificado por typeName a partir da montagem que é retornada por assemblyResolver ou pela resolução padrão da assembleia. Se não for fornecido montagem, o método pode fornecer uma. O método também utiliza um parâmetro que especifica se deve ser realizada uma pesquisa insensível a maiúsculas e minúsculas; false é passado para esse parâmetro.

Atenção: Não passe métodos de chamadas desconhecidas ou não confiáveis.

throwOnError
Boolean

true lançar uma exceção se o tipo não puder ser encontrado; false para regressar null. Especificar false também suprime algumas outras condições de exceção, mas não todas. Veja a secção de Exceções.

Devoluções

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

Exceções

typeName é null.

É invocado um inicializador de classe que lança uma exceção.

throwOnError é true e o tipo não é encontrado.

-ou-

throwOnError é true e typeName contém caracteres inválidos, como um separador embutido.

-ou-

throwOnError é true e typeName é uma cadeia vazia.

-ou-

throwOnError é true e typeName representa um tipo de array com tamanho inválido.

-ou-

typeName representa um array de TypedReference.

Ocorre um erro quando typeName é analisado num nome de tipo e num nome de montagem (por exemplo, quando o nome do tipo simples inclui um carácter especial não escapado).

-ou-

throwOnError é true e typeName contém sintaxe inválida (por exemplo, "MyType[,*,]").

-ou-

typeName representa um tipo genérico que tem um tipo apontador, um ByRef tipo, ou Void como um dos 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 dos seus argumentos de tipo não satisfaz as restrições para o parâmetro de tipo correspondente.

throwOnError is true e a assembly ou uma das suas dependências não foi encontrada.

-ou-

typeName contém um nome assembly inválido.

-ou-

typeName é um nome de assembleia válido sem nome de tipo.

A montagem ou uma das suas dependências foi encontrada, mas não pôde ser carregada.

A assembly ou uma das suas dependências não é válida para o runtime atualmente carregado.

Observações

Cenários de utilização para este método e detalhes sobre os assemblyResolver parâmetros e typeResolver podem ser encontrados na GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) sobrecarga do método.

Chamar este método overload é o mesmo que chamar o GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) método overload e especificar false para o ignoreCase parâmetro.

Aplica-se a

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 a montagem 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);
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 obter. Se o typeResolver parâmetro for fornecido, o nome do tipo pode ser qualquer cadeia capaz typeResolver de resolver. Se o assemblyResolver parâmetro for fornecido ou se for usada resolução de tipo padrão, typeName deve ser um nome qualificado pelo conjunto (ver AssemblyQualifiedName), a menos que o tipo esteja no conjunto atualmente em execução ou em mscorlib.dll/System.Private.CoreLib.dll, caso em que é suficiente fornecer o nome do tipo qualificado pelo seu espaço de nomes.

assemblyResolver
Func<AssemblyName,Assembly>

Um método que localiza e devolve a montagem especificada em typeName. O nome da assembleia é passado como assemblyResolver um AssemblyName objeto. Se typeName não contiver o nome de uma assembleia, assemblyResolver não é chamado. Se assemblyResolver não for fornecida, é realizada a resolução padrão de montagem.

Atenção: Não passe métodos de chamadas desconhecidas ou não confiáveis. Fazê-lo pode resultar na elevação de privilégios para código malicioso. Use apenas os métodos fornecidos ou com os quais esteja familiarizado.

typeResolver
Func<Assembly,String,Boolean,Type>

Um método que localiza e devolve o tipo especificado por typeName a partir da montagem que é retornada por assemblyResolver ou pela resolução padrão da assembleia. Se não for fornecido montagem, o typeResolver método pode fornecer uma. O método também utiliza um parâmetro que especifica se deve ser realizada uma pesquisa insensível a maiúsculas e minúsculas; false é passado para esse parâmetro.

Atenção: Não passe métodos de chamadas desconhecidas ou não confiáveis.

Devoluções

O tipo com o nome especificado, ou null se o tipo não for encontrado.

Exceções

typeName é null.

É invocado um inicializador de classe que lança uma exceção.

Ocorre um erro quando typeName é analisado num nome de tipo e num nome de montagem (por exemplo, quando o nome do tipo simples inclui um carácter especial não escapado).

-ou-

typeName representa um tipo genérico que tem um tipo apontador, um ByRef tipo, ou Void como um dos 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 dos seus argumentos de tipo não satisfaz as restrições para o parâmetro de tipo correspondente.

typeName representa um tipo inválido, por exemplo, um array de TypedReference.

A montagem ou uma das suas dependências foi encontrada, mas não pôde ser carregada.

-ou-

typeName contém um nome assembly inválido.

-ou-

typeName é um nome de assembleia válido sem nome de tipo.

A assembly ou uma das suas dependências não é válida para o runtime atualmente carregado.

Observações

Cenários de utilização para este método e detalhes sobre os assemblyResolver parâmetros e typeResolver podem ser encontrados na GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) sobrecarga do método.

Note

Se typeName não for encontrado, a chamada ao GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) método retorna null. Não faz exceção. Para controlar se uma exceção é lançada, chama-se uma sobrecarga do GetType método que tem um throwOnError parâmetro.

Chamar a este método overload é o mesmo que chamar o GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) método overload e especificar false para os throwOnError parâmetros e ignoreCase .

Aplica-se a

GetType()

Obtém a corrente Type.

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

Devoluções

O atual Type.

Implementações

Exceções

É invocado um inicializador de classe que lança uma exceção.

Ver também

Aplica-se a

GetType(String, Boolean)

Obtém-se Type com o nome especificado, realizando uma pesquisa sensível a maiúsculas minúsculas e especificando se deve lançar uma exceção caso o tipo não seja encontrado.

public:
 static Type ^ GetType(System::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 para a assembleia do tipo a obter. Consulte AssemblyQualifiedName. Se o tipo estiver no conjunto em execução ou em mscorlib.dll/System.Private.CoreLib.dll, basta fornecer o nome do tipo qualificado pelo seu espaço de nomes.

throwOnError
Boolean

true lançar uma exceção se o tipo não puder ser encontrado; false para regressar null. Especificar false também suprime algumas outras condições de exceção, mas não todas. Veja a secção de Exceções.

Devoluções

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

Exceções

typeName é null.

É invocado um inicializador de classe que lança uma exceção.

throwOnError é true e o tipo não é encontrado.

-ou-

throwOnError é true e typeName contém caracteres inválidos, como um separador embutido.

-ou-

throwOnError é true e typeName é uma cadeia vazia.

-ou-

throwOnError é true e typeName representa um tipo de array com tamanho inválido.

-ou-

typeName representa um array 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 apontador, um ByRef tipo, ou Void como um dos 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 dos seus argumentos de tipo não satisfaz as restrições para o parâmetro de tipo correspondente.

throwOnError is true e a assembly ou uma das suas dependências não foi encontrada.

A montagem ou uma das suas dependências foi encontrada, mas não pôde ser carregada.

Nota: Em .NET para aplicações Windows Store ou a Portable Class Library, apanhe a exceção da classe base, IOException, em vez disso.

A assembly ou uma das suas dependências não é válida para o runtime atualmente carregado.

Exemplos

O exemplo seguinte recupera o tipo de System.Int32 e usa esse objeto tipo para mostrar a FullName propriedade de System.Int32. Se um objeto tipo se referir a um conjunto que não existe, este exemplo lança 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

Observações

Pode usar o GetType método para obter um Type objeto para um tipo noutro conjunto se souber o seu nome qualificado para montagem, que pode ser obtido a partir de AssemblyQualifiedName. GetType causa carga do conjunto especificado em typeName. Também podes carregar um assembly usando o Assembly.Load método, e depois usar o Assembly.GetType método ou Assembly.GetTypes para obter Type objetos. Se um tipo estiver num assembly conhecido pelo seu programa em tempo de compilação, é mais eficiente usar typeof em C# ou o operador GetType em Visual Basic.

.NET Framework apenas: GetType só funciona em assemblies carregados a partir do disco. Se ligares GetType para procurar um tipo definido num assembly dinâmico definido usando os System.Reflection.Emit serviços, podes ter comportamentos inconsistentes. O comportamento depende se a montagem dinâmica é persistente, ou seja, criada usando os RunAndSave modos de acesso ou Save da System.Reflection.Emit.AssemblyBuilderAccess enumeração. Se o conjunto dinâmico for persistente e tiver sido escrito no disco antes GetType de ser chamado, o carregador encontra o conjunto guardado no disco, carrega esse conjunto e recupera o tipo desse conjunto. Se o assembly não tiver sido guardado no disco quando GetType é chamado, o método devolve null. GetType não compreende montagens dinâmicas transitórias; portanto, ao chamar GetType para recuperar um tipo numa montagem dinâmica transitória devolve null.

No .NET Framework, para usar GetType num módulo dinâmico, subscreva o evento AppDomain.AssemblyResolve e chama GetType antes de guardar. Caso contrário, receberá duas cópias do assembly em memória.

No .NET Core 3.0 e versões posteriores, as cargas de montagem desencadeadas por esta 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 certas outras condições de exceção, conforme descrito na secção Exceções. Algumas exceções são lançadas independentemente do valor de throwOnError. Por exemplo, se o tipo for encontrado mas não puder ser carregado, a TypeLoadException é lançado mesmo que throwOnError seja false.

A tabela a seguir mostra quais membros de uma classe base são retornados pelos Get métodos ao refletir sobre um tipo.

Tipo de Membro Estático Não-estático
Construtor No No
Campo No Yes. Um campo é sempre ocultado com base no nome e assinatura.
Event Não aplicável A regra comum do sistema de tipos é que a herança é a mesma dos métodos que implementam a propriedade. A reflexão trata propriedades como esconder pelo nome e assinatura. Veja a nota 2 abaixo.
Método No Yes. Um método (virtual e não virtual) pode ser ocultado por nome ou ocultado por nome e assinatura.
Tipo aninhado No No
Property Não aplicável A regra comum do sistema de tipos é que a herança é a mesma dos métodos que implementam a propriedade. A reflexão trata propriedades como esconder pelo nome e assinatura. Veja a nota 2 abaixo.
  1. Ocultar por nome e assinatura considera todas as partes da assinatura, incluindo modificadores personalizados, tipos de retorno, tipos de parâmetros, sentinelas e convenções de chamada não gerenciadas. Esta é uma comparação binária.

  2. Para reflexão, as propriedades e os eventos são ocultados 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 acessor get, a propriedade de classe derivada ocultará a propriedade de classe base e você não poderá acessar o setter na classe base.

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

Arrays 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 pelo seu espaço de nomes ou um nome qualificado para montagem que inclui uma especificação de nome de assembleia. Consulte AssemblyQualifiedName.

Se typeName incluir o namespace mas não o nome assembly, este método pesquisa apenas a assembly do objeto que chama e mscorlib.dll/System.Private.CoreLib.dll, nessa ordem. Se typeName estiver totalmente qualificado com o nome da montagem parcial ou completa, este método pesquisa na montagem especificada. Se a assembleia tiver um nome forte, é necessário um nome completo da assembleia.

A AssemblyQualifiedName propriedade devolve um nome de tipo totalmente qualificado, incluindo tipos aninhados, o nome assembly e argumentos genéricos. Todos os compiladores que suportam o runtime da linguagem comum emitirão o nome simples de uma classe aninhada, e a reflection constrói um nome distorcido quando consultada, de acordo com as seguintes convenções.

Note

A arquitetura do processador faz parte da identidade de assembly, podendo ser especificada como parte de cadeias de nomes assembly. Por exemplo, "ProcessorArchitecture=msil". No entanto, não está incluído na cadeia devolvida pela AssemblyQualifiedName propriedade, por razões de compatibilidade. Também podes carregar tipos criando um AssemblyName objeto e passando-o para uma sobrecarga apropriada do Load método. Pode então usar o Assembly.GetType método para carregar tipos a partir do conjunto. Ver também AssemblyName.ProcessorArchitecture.

Delimitador Meaning
Barra inversa (\) Personagem de fuga.
Backtick (') Precede um ou mais dígitos que representam o número de parâmetros do tipo, localizados no final do nome de um tipo genérico.
Parênteses ([]) Anexe uma lista de argumentos de tipo genérico, para um tipo genérico construído; Dentro de uma lista de argumentos de tipo, inclua um tipo qualificado para assembleia.
Vírgula (,) Precede o nome da Assembleia.
Ponto final (.) Denota identificadores de espaço de nomes.
Sinal de adição (+) Precede uma classe aninhada.

Por exemplo, o nome totalmente qualificado de uma turma pode ser assim:

TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly

Se o namespace fosse TopNamespace.Sub+Namespace, então a string teria de preceder o sinal de mais (+) com um carácter escape (\) para evitar que fosse interpretada como um separador de aninhamento. A reflexão emite esta cadeia da seguinte forma:

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 um Type, use GetType ou apenas com o nome do tipo ou com o nome qualificado da assembleia. GetType com apenas o nome do tipo, procurará o Type no conjunto do chamador e depois no conjunto do Sistema. GetType Com o nome do tipo qualificado da assembleia, procurará o Type em qualquer assembleia.

Os nomes dos tipos podem incluir caracteres finais que indicam informação adicional sobre o tipo, como se o tipo é um tipo de referência, um tipo de ponteiro ou um tipo de array. Para recuperar o nome do tipo sem estes caracteres finais, use t.GetElementType().ToString(), onde t é o tipo.

Os espaços são relevantes em todos os componentes do nome do tipo, exceto no nome da assembleia. No nome da assembleia, 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 de dígitos que representam o número de argumentos genéricos do tipo. O objetivo desta manipulação de nomes é permitir que compiladores suportem tipos genéricos com o mesmo nome mas com diferentes números de parâmetros de tipos, ocorrendo no mesmo âmbito. Por exemplo, a reflexão devolve os nomes distorcidos Tuple`1 e Tuple`2 dos métodos genéricos Tuple(Of T) e Tuple(Of T0, T1) em Visual Basic, ou Tuple<T> e Tuple<T0, T1> em Visual C#.

Para tipos genéricos, a lista de argumentos de tipo está incluída entre parênteses, 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 de MyType com chaves Dictionary<TKey,TValue> de tipo String pode ser representado da seguinte forma:

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

Para especificar um tipo qualificado para montagem dentro de uma lista de argumentos de tipo, inclua o tipo qualificado para montagem entre parênteses. Caso contrário, as vírgulas que separam as partes do nome qualificado pela assembleia 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 forma:

Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")

Note

Um tipo qualificado para montagem só pode ser incluído entre parênteses quando aparece numa lista de parâmetros de tipo. As regras para pesquisar conjuntos por tipos qualificados e não qualificados em listas de parâmetros de tipo são as mesmas que as regras para tipos qualificados e não qualificados não genéricos.

Tipos anuláveis são um caso especial de tipos genéricos. Por exemplo, um nullable Int32 é representado pela string "System.Nullable'1[System.Int32]".

Note

Também podes obter tipos anuláveis usando operadores de tipo. Por exemplo, o tipo anulável Boolean é devolvido por typeof(Nullable<bool>) em C# e por GetType(Nullable(Of Boolean)) em Visual Basic.

A tabela seguinte mostra a sintaxe que usas GetType para vários tipos.

Para Conseguir Use
Um anulável Int32 Type.GetType("System.Nullable`1[System.Int32]")
Um apontador não gerido para MyType Type.GetType("MyType*")
Um apontador não gerido para um apontador para MyType Type.GetType("MyType**")
Um ponteiro gerido ou referência a MyType Type.GetType("MyType&"). Note-se que, ao contrário dos ponteiros, as referências são limitadas a um nível.
Uma classe mãe e uma classe aninhada Type.GetType("MyParentClass+MyNestedClass")
Um array unidimensional com limite inferior de 0 Type.GetType("MyArray[]")
Um arranjo unidimensional com um limite inferior desconhecido Type.GetType("MyArray[*]")
Um arranjo n-dimensional Uma vírgula (,) dentro dos parênteses um total de n-1 vezes. Por exemplo, System.Object[,,] representa um array tridimensional Object .
Arranjo de um array bidimensional Type.GetType("MyArray[][]")
Uma matriz retangular bidimensional 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 por montagem Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]")
Um tipo genérico qualificado por montagem com um argumento de tipo qualificado por montagem 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]]")

Ver também

Aplica-se a

GetType(String)

Obtém-se Type com o nome especificado, realizando uma pesquisa sensível a maiúsculas minúsculas.

public:
 static Type ^ GetType(System::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 para a assembleia do tipo a obter. Consulte AssemblyQualifiedName. Se o tipo estiver no conjunto em execução ou em mscorlib.dll/System.Private.CoreLib.dll, basta fornecer o nome do tipo qualificado pelo seu espaço de nomes.

Devoluções

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

Exceções

typeName é null.

É invocado um inicializador de classe que lança uma exceção.

typeName representa um tipo genérico que tem um tipo apontador, um ByRef tipo, ou Void como um dos 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 dos seus argumentos de tipo não satisfaz as restrições para o parâmetro de tipo correspondente.

typeName representa um tipo inválido, por exemplo, um array de TypedReference.

A montagem ou uma das suas dependências foi encontrada, mas não pôde ser carregada.

Nota: Em .NET para aplicações Windows Store ou a Portable Class Library, apanhe a exceção da classe base, IOException, em vez disso.

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

Exemplos

O exemplo seguinte recupera o tipo de System.Int32 e usa esse objeto tipo para mostrar 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

Observações

Pode usar o GetType método para obter um Type objeto para um tipo noutro conjunto se souber o seu nome qualificado para montagem, que pode ser obtido a partir de AssemblyQualifiedName. GetType causa carga do conjunto especificado em typeName. Também podes carregar um assembly usando o Assembly.Load método, e depois usar o Assembly.GetType método ou Assembly.GetTypes para obter Type objetos. Se um tipo estiver num assembly conhecido pelo seu programa em tempo de compilação, é mais eficiente usar typeof em C# ou o operador GetType em Visual Basic.

Note

Se typeName não for encontrado, a chamada ao GetType(String) método retorna null. Não faz exceção. Para controlar se uma exceção é lançada, chama-se uma sobrecarga do GetType método que tem um throwOnError parâmetro.

.NET Framework apenas: GetType só funciona em assemblies carregados a partir do disco. Se ligares GetType para procurar um tipo definido num assembly dinâmico definido usando os System.Reflection.Emit serviços, podes ter comportamentos inconsistentes. O comportamento depende se a montagem dinâmica é persistente, ou seja, criada usando os RunAndSave modos de acesso ou Save da System.Reflection.Emit.AssemblyBuilderAccess enumeração. Se o conjunto dinâmico for persistente e tiver sido escrito no disco antes GetType de ser chamado, o carregador encontra o conjunto guardado no disco, carrega esse conjunto e recupera o tipo desse conjunto. Se o assembly não tiver sido guardado no disco quando GetType é chamado, o método devolve null. GetType não compreende montagens dinâmicas transitórias; portanto, ao chamar GetType para recuperar um tipo numa montagem dinâmica transitória devolve null.

No .NET Framework, para usar GetType num módulo dinâmico, subscreva o evento AppDomain.AssemblyResolve e chama GetType antes de guardar. Caso contrário, receberá duas cópias do assembly em memória.

No .NET Core 3.0 e versões posteriores, as cargas de montagem desencadeadas por esta 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 Get métodos ao refletir sobre um tipo.

Tipo de Membro Estático Não-estático
Construtor No No
Campo No Yes. Um campo é sempre ocultado com base no nome e assinatura.
Event Não aplicável A regra comum do sistema de tipos é que a herança é a mesma dos métodos que implementam a propriedade. A reflexão trata propriedades como esconder pelo nome e assinatura. Veja a nota 2 abaixo.
Método No Yes. Um método (virtual e não virtual) pode ser ocultado por nome ou ocultado por nome e assinatura.
Tipo aninhado No No
Property Não aplicável A regra comum do sistema de tipos é que a herança é a mesma dos métodos que implementam a propriedade. A reflexão trata propriedades como esconder pelo nome e assinatura. Veja a nota 2 abaixo.
  1. Ocultar por nome e assinatura considera todas as partes da assinatura, incluindo modificadores personalizados, tipos de retorno, tipos de parâmetros, sentinelas e convenções de chamada não gerenciadas. Esta é uma comparação binária.

  2. Para reflexão, as propriedades e os eventos são ocultados 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 acessor get, a propriedade de classe derivada ocultará a propriedade de classe base e você não poderá acessar o setter na classe base.

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

Arrays 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 pelo seu espaço de nomes ou um nome qualificado para montagem que inclui uma especificação de nome de assembleia. Consulte AssemblyQualifiedName.

Se typeName incluir o namespace mas não o nome assembly, este método pesquisa apenas a assembly do objeto que chama e mscorlib.dll/System.Private.CoreLib.dll, nessa ordem. Se typeName estiver totalmente qualificado com o nome da montagem parcial ou completa, este método pesquisa na montagem especificada. Se a assembleia tiver um nome forte, é necessário um nome completo da assembleia.

A AssemblyQualifiedName propriedade devolve um nome de tipo totalmente qualificado, incluindo tipos aninhados, o nome de montagem e argumentos genéricos de tipo. Todos os compiladores que suportam o runtime da linguagem comum emitirão o nome simples de uma classe aninhada, e a reflection constrói um nome distorcido quando consultada, de acordo com as seguintes convenções.

Note

A arquitetura do processador faz parte da identidade de assembly, podendo ser especificada como parte de cadeias de nomes assembly. Por exemplo, "ProcessorArchitecture=msil". No entanto, não está incluído na cadeia devolvida pela AssemblyQualifiedName propriedade, por razões de compatibilidade. Também podes carregar tipos criando um AssemblyName objeto e passando-o para uma sobrecarga apropriada do Load método. Pode então usar o Assembly.GetType método para carregar tipos a partir do conjunto. Ver também AssemblyName.ProcessorArchitecture.

Delimitador Meaning
Barra inversa (\) Personagem de fuga.
Backtick (') Precede um ou mais dígitos que representam o número de parâmetros do tipo, localizados no final do nome de um tipo genérico.
Parênteses ([]) Anexe uma lista de argumentos de tipo genérico, para um tipo genérico construído; Dentro de uma lista de argumentos de tipo, inclua um tipo qualificado para assembleia.
Vírgula (,) Precede o nome da Assembleia.
Ponto final (.) Denota identificadores de espaço de nomes.
Sinal de adição (+) Precede uma classe aninhada.

Por exemplo, o nome totalmente qualificado de uma turma pode ser assim:

TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly

Se o namespace fosse TopNamespace.Sub+Namespace, então a string teria de preceder o sinal de mais (+) com um carácter escape (\) para evitar que fosse interpretada como um separador de aninhamento. A reflexão emite esta cadeia da seguinte forma:

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 um Type, use GetType ou apenas com o nome do tipo ou com o nome qualificado da assembleia. GetType com apenas o nome do tipo, procurará o Type no conjunto do chamador e depois no conjunto do Sistema. GetType Com o nome do tipo qualificado da assembleia, procurará o Type em qualquer assembleia.

Os nomes dos tipos podem incluir caracteres finais que indicam informação adicional sobre o tipo, como se o tipo é um tipo de referência, um tipo de ponteiro ou um tipo de array. Para recuperar o nome do tipo sem estes caracteres finais, use t.GetElementType().ToString(), onde t é o tipo.

Os espaços são relevantes em todos os componentes do nome do tipo, exceto no nome da assembleia. No nome da assembleia, 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 de dígitos que representam o número de argumentos genéricos do tipo. O objetivo desta manipulação de nomes é permitir que compiladores suportem tipos genéricos com o mesmo nome mas com diferentes números de parâmetros de tipos, ocorrendo no mesmo âmbito. Por exemplo, a reflexão devolve os nomes distorcidos Tuple`1 e Tuple`2 dos métodos genéricos Tuple(Of T) e Tuple(Of T0, T1) em Visual Basic, ou Tuple<T> e Tuple<T0, T1> em Visual C#.

Para tipos genéricos, a lista de argumentos de tipo está incluída entre parênteses, 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 de MyType com chaves Dictionary<TKey,TValue> de tipo String pode ser representado da seguinte forma:

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

Para especificar um tipo qualificado para montagem dentro de uma lista de argumentos de tipo, inclua o tipo qualificado para montagem entre parênteses. Caso contrário, as vírgulas que separam as partes do nome qualificado pela assembleia 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 forma:

Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")

Note

Um tipo qualificado para montagem só pode ser incluído entre parênteses quando aparece numa lista de parâmetros de tipo. As regras para pesquisar conjuntos por tipos qualificados e não qualificados em listas de parâmetros de tipo são as mesmas que as regras para tipos qualificados e não qualificados não genéricos.

Tipos anuláveis são um caso especial de tipos genéricos. Por exemplo, um nullable Int32 é representado pela string "System.Nullable'1[System.Int32]".

Note

Também podes obter tipos anuláveis usando operadores de tipo. Por exemplo, o tipo anulável Boolean é devolvido por typeof(Nullable<bool>) em C# e por GetType(Nullable(Of Boolean)) em Visual Basic.

A tabela seguinte mostra a sintaxe que usas GetType para vários tipos.

Para Conseguir Use
Um anulável Int32 Type.GetType("System.Nullable`1[System.Int32]")
Um apontador não gerido para MyType Type.GetType("MyType*")
Um apontador não gerido para um apontador para MyType Type.GetType("MyType**")
Um ponteiro gerido ou referência a MyType Type.GetType("MyType&"). Note-se que, ao contrário dos ponteiros, as referências são limitadas a um nível.
Uma classe mãe e uma classe aninhada Type.GetType("MyParentClass+MyNestedClass")
Um array unidimensional com limite inferior de 0 Type.GetType("MyType[]")
Um arranjo unidimensional com um limite inferior desconhecido Type.GetType("MyType[*]")
Um arranjo n-dimensional Uma vírgula (,) dentro dos parênteses um total de n-1 vezes. Por exemplo, System.Object[,,] representa um array tridimensional Object .
Um array de arrays unidimensionais Type.GetType("MyType[][]")
Uma matriz retangular bidimensional 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 por montagem Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]")
Um tipo genérico qualificado por montagem com um argumento de tipo qualificado por montagem 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]]")

Ver também

Aplica-se a

GetType(String, Boolean, Boolean)

Obtém o Type com o nome especificado, especificando se deve lançar uma exceção caso o tipo não seja encontrado e se deve realizar uma pesquisa sensível a maiúsculas e minúsculas.

public:
 static Type ^ GetType(System::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 para a assembleia do tipo a obter. Consulte AssemblyQualifiedName. Se o tipo estiver no conjunto em execução ou em mscorlib.dll/System.Private.CoreLib.dll, basta fornecer o nome do tipo qualificado pelo seu espaço de nomes.

throwOnError
Boolean

true lançar uma exceção se o tipo não puder ser encontrado; false para regressar null. Especificar false também suprime algumas outras condições de exceção, mas não todas. Veja a secção de Exceções.

ignoreCase
Boolean

true para realizar uma pesquisa insensível a maiúsculos e maiúsculos para typeName, false para realizar uma pesquisa sensível a maiúsculas e minúsculas para typeName.

Devoluções

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

Exceções

typeName é null.

É invocado um inicializador de classe que lança uma exceção.

throwOnError é true e o tipo não é encontrado.

-ou-

throwOnError é true e typeName contém caracteres inválidos, como um separador embutido.

-ou-

throwOnError é true e typeName é uma cadeia vazia.

-ou-

throwOnError é true e typeName representa um tipo de array com tamanho inválido.

-ou-

typeName representa um array 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 apontador, um ByRef tipo, ou Void como um dos 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 dos seus argumentos de tipo não satisfaz as restrições para o parâmetro de tipo correspondente.

throwOnError is true e a assembly ou uma das suas dependências não foi encontrada.

A montagem ou uma das suas dependências foi encontrada, mas não pôde ser carregada.

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

Observações

Pode usar o GetType método para obter um Type objeto para um tipo noutro conjunto se souber o seu nome qualificado para montagem, que pode ser obtido a partir de AssemblyQualifiedName. GetType causa carga do conjunto especificado em typeName. Também podes carregar um assembly usando o Assembly.Load método, e depois usar o Assembly.GetType método ou Assembly.GetTypes para obter Type objetos. Se um tipo estiver num assembly conhecido pelo seu programa em tempo de compilação, é mais eficiente usar typeof em C# ou o operador GetType em Visual Basic.

.NET Framework apenas: GetType só funciona em assemblies carregados a partir do disco. Se ligares GetType para procurar um tipo definido num assembly dinâmico definido usando os System.Reflection.Emit serviços, podes ter comportamentos inconsistentes. O comportamento depende se a montagem dinâmica é persistente, ou seja, criada usando os RunAndSave modos de acesso ou Save da System.Reflection.Emit.AssemblyBuilderAccess enumeração. Se o conjunto dinâmico for persistente e tiver sido escrito no disco antes GetType de ser chamado, o carregador encontra o conjunto guardado no disco, carrega esse conjunto e recupera o tipo desse conjunto. Se o assembly não tiver sido guardado no disco quando GetType é chamado, o método devolve null. GetType não compreende montagens dinâmicas transitórias; portanto, ao chamar GetType para recuperar um tipo numa montagem dinâmica transitória devolve null.

No .NET Framework, para usar GetType num módulo dinâmico, subscreva o evento AppDomain.AssemblyResolve e chama GetType antes de guardar. Caso contrário, receberá duas cópias do assembly em memória.

No .NET Core 3.0 e versões posteriores, as cargas de montagem desencadeadas por esta 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 certas outras condições de exceção, conforme descrito na secção Exceções. Algumas exceções são lançadas independentemente do valor de throwOnError. Por exemplo, se o tipo for encontrado mas não puder ser carregado, a TypeLoadException é lançado mesmo que throwOnError seja false.

A tabela a seguir mostra quais membros de uma classe base são retornados pelos Get métodos ao refletir sobre um tipo.

Tipo de Membro Estático Não-estático
Construtor No No
Campo No Yes. Um campo é sempre ocultado com base no nome e assinatura.
Event Não aplicável A regra comum do sistema de tipos é que a herança é a mesma dos métodos que implementam a propriedade. A reflexão trata propriedades como esconder pelo nome e assinatura. Veja a nota 2 abaixo.
Método No Yes. Um método (virtual e não virtual) pode ser ocultado por nome ou ocultado por nome e assinatura.
Tipo aninhado No No
Property Não aplicável A regra comum do sistema de tipos é que a herança é a mesma dos métodos que implementam a propriedade. A reflexão trata propriedades como esconder pelo nome e assinatura. Veja a nota 2 abaixo.
  1. Ocultar por nome e assinatura considera todas as partes da assinatura, incluindo modificadores personalizados, tipos de retorno, tipos de parâmetros, sentinelas e convenções de chamada não gerenciadas. Esta é uma comparação binária.

  2. Para reflexão, as propriedades e os eventos são ocultados 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 acessor get, a propriedade de classe derivada ocultará a propriedade de classe base e você não poderá acessar o setter na classe base.

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

Arrays 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 pelo seu espaço de nomes ou um nome qualificado para montagem que inclui uma especificação de nome de assembleia. Consulte AssemblyQualifiedName.

Se typeName incluir o namespace mas não o nome assembly, este método pesquisa apenas a assembly do objeto que chama e mscorlib.dll/System.Private.CoreLib.dll, nessa ordem. Se typeName estiver totalmente qualificado com o nome da montagem parcial ou completa, este método pesquisa na montagem especificada. Se a assembleia tiver um nome forte, é necessário um nome completo da assembleia.

A AssemblyQualifiedName propriedade devolve um nome de tipo totalmente qualificado incluindo tipos aninhados, o nome de montagem e argumentos de tipo. Todos os compiladores que suportam o runtime da linguagem comum emitirão o nome simples de uma classe aninhada, e a reflection constrói um nome distorcido quando consultada, de acordo com as seguintes convenções.

Note

A arquitetura do processador faz parte da identidade de assembly, podendo ser especificada como parte de cadeias de nomes assembly. Por exemplo, "ProcessorArchitecture=msil". No entanto, não está incluído na cadeia devolvida pela AssemblyQualifiedName propriedade, por razões de compatibilidade. Também podes carregar tipos criando um AssemblyName objeto e passando-o para uma sobrecarga apropriada do Load método. Pode então usar o Assembly.GetType método para carregar tipos a partir do conjunto. Ver também AssemblyName.ProcessorArchitecture.

Delimitador Meaning
Barra inversa (\) Personagem de fuga.
Backtick (') Precede um ou mais dígitos que representam o número de parâmetros do tipo, localizados no final do nome de um tipo genérico.
Parênteses ([]) Anexe uma lista de argumentos de tipo genérico, para um tipo genérico construído; Dentro de uma lista de argumentos de tipo, inclua um tipo qualificado para assembleia.
Vírgula (,) Precede o nome da Assembleia.
Ponto final (.) Denota identificadores de espaço de nomes.
Sinal de adição (+) Precede uma classe aninhada.

Por exemplo, o nome totalmente qualificado de uma turma pode ser assim:

TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly

Se o namespace fosse TopNamespace.Sub+Namespace, então a string teria de preceder o sinal de mais (+) com um carácter escape (\) para evitar que fosse interpretada como um separador de aninhamento. A reflexão emite esta cadeia da seguinte forma:

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 um Type, use GetType ou apenas com o nome do tipo ou com o nome qualificado da assembleia. GetType com apenas o nome do tipo, procurará o Type no conjunto do chamador e depois no conjunto do Sistema. GetType Com o nome do tipo qualificado da assembleia, procurará o Type em qualquer assembleia.

Os nomes dos tipos podem incluir caracteres finais que indicam informação adicional sobre o tipo, como se o tipo é um tipo de referência, um tipo de ponteiro ou um tipo de array. Para recuperar o nome do tipo sem estes caracteres finais, use t.GetElementType().ToString(), onde t é o tipo.

Os espaços são relevantes em todos os componentes do nome do tipo, exceto no nome da assembleia. No nome da assembleia, 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 de dígitos que representam o número de argumentos genéricos do tipo. O objetivo desta manipulação de nomes é permitir que compiladores suportem tipos genéricos com o mesmo nome mas com diferentes números de parâmetros de tipos, ocorrendo no mesmo âmbito. Por exemplo, a reflexão devolve os nomes distorcidos Tuple`1 e Tuple`2 dos métodos genéricos Tuple(Of T) e Tuple(Of T0, T1) em Visual Basic, ou Tuple<T> e Tuple<T0, T1> em Visual C#.

Para tipos genéricos, a lista de argumentos de tipo está incluída entre parênteses, 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 de MyType com chaves Dictionary<TKey,TValue> de tipo String pode ser representado da seguinte forma:

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

Para especificar um tipo qualificado para montagem dentro de uma lista de argumentos de tipo, inclua o tipo qualificado para montagem entre parênteses. Caso contrário, as vírgulas que separam as partes do nome qualificado pela assembleia 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 forma:

Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")

Note

Um tipo qualificado para montagem só pode ser incluído entre parênteses quando aparece numa lista de parâmetros de tipo. As regras para pesquisar conjuntos por tipos qualificados e não qualificados em listas de parâmetros de tipo são as mesmas que as regras para tipos qualificados e não qualificados não genéricos.

Tipos anuláveis são um caso especial de tipos genéricos. Por exemplo, um nullable Int32 é representado pela string "System.Nullable'1[System.Int32]".

Note

Também podes obter tipos anuláveis usando operadores de tipo. Por exemplo, o tipo anulável Boolean é devolvido por typeof(Nullable<bool>) em C# e por GetType(Nullable(Of Boolean)) em Visual Basic.

A tabela seguinte mostra a sintaxe que usas GetType para vários tipos.

Para Conseguir Use
Um anulável Int32 Type.GetType("System.Nullable`1[System.Int32]")
Um apontador não gerido para MyType Type.GetType("MyType*")
Um apontador não gerido para um apontador para MyType Type.GetType("MyType**")
Um ponteiro gerido ou referência a MyType Type.GetType("MyType&"). Note-se que, ao contrário dos ponteiros, as referências são limitadas a um nível.
Uma classe mãe e uma classe aninhada Type.GetType("MyParentClass+MyNestedClass")
Um array unidimensional com limite inferior de 0 Type.GetType("MyArray[]")
Um arranjo unidimensional com um limite inferior desconhecido Type.GetType("MyArray[*]")
Um arranjo n-dimensional Uma vírgula (,) dentro dos parênteses um total de n-1 vezes. Por exemplo, System.Object[,,] representa um array tridimensional Object .
Arranjo de um array bidimensional Type.GetType("MyArray[][]")
Uma matriz retangular bidimensional 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 por montagem Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]")
Um tipo genérico qualificado por montagem com um argumento de tipo qualificado por montagem 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]]")

Ver também

Aplica-se a