GetType Método (String, Boolean)
Este artigo foi traduzido por máquina. Para visualizar o arquivo em inglês, marque a caixa de seleção Inglês. Você também pode exibir o texto Em inglês em uma janela pop-up, movendo o ponteiro do mouse sobre o texto.
Tradução
Inglês

Método Type.GetType (String, Boolean)

 

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

Namespace:   System
Assembly:  mscorlib (em mscorlib.dll)

public static Type GetType(
	string typeName,
	bool throwOnError
)

Parâmetros

typeName
Type: System.String

O nome qualificado do assembly do tipo a ser obtido. Consulte AssemblyQualifiedName. Se o tipo é no assembly atualmente em execução ou em mscorlib. dll, é suficiente fornecer o nome de tipo qualificado por seu namespace.

throwOnError
Type: System.Boolean

true lançar uma exceção se o tipo não pode ser encontrado; false para retornar null. Especificando false também suprime algumas condições de exceção, mas não todos. Consulte a seção exceções.

Valor de retorno

Type: System.Type

O tipo com o nome especificado. Se o tipo não for encontrado, o throwOnError parâmetro especifica se null for 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.

Exception Condition
ArgumentNullException

typeName é null.

TargetInvocationException

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

TypeLoadException

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 seqüência vazia.

-ou-

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

-ou-

typeName representa uma matriz de TypedReference.

ArgumentException

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

- ou -

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

FileNotFoundException

throwOnError é true e o assembly ou uma de suas dependências não foi encontrada.

FileLoadException
System_CAPS_noteObservação

No .NET for Windows Store apps ou biblioteca de classes portátil, capturar a exceção de classe base, IOException, em vez disso.

O assembly ou uma de suas dependências foi encontrada, mas não pôde ser carregada.

BadImageFormatException

O assembly ou uma de suas dependências não é válida.

-ou-

Versão 2.0 ou posterior do common language runtime está atualmente carregado e o assembly foi compilado com uma versão posterior.

Você pode usar o GetType método para obter um Type do objeto para um tipo em outro assembly, se você souber o nome qualificado de namespace. GetType faz com que o carregamento do assembly especificado em typeName. Você também pode carregar um assembly usando o Load método e use o GetType ou GetTypes métodos do Assembly para obter Type objetos. Se for um tipo em um conjunto conhecido para o seu programa em tempo de compilação, é mais eficiente usar typeof no c#, GetType no Visual Basic, ou typeid em C++.

GetType funciona somente em assemblies carregados do disco. Se você chamar GetType para pesquisar um tipo definido em um assembly dinâmico definido usando o System.Reflection.Emit serviços, você pode obter um comportamento inconsistente. O comportamento depende se o assembly dinâmico é persistente, ou seja, criado usando o RunAndSave ou Save acessar modos do System.Reflection.Emit.AssemblyBuilderAccess enumeração. Se o assembly dinâmico é persistente e foi gravado no disco antes de GetType é chamado, o carregador localiza o assembly salvo em disco, carrega o assembly e recupera o tipo desse assembly. Se o assembly não tiver sido salvo em disco quando GetType é chamado, o método retorna null. GetType não entende transitórios assemblies dinâmicos; Portanto, chamar GetType para recuperar um tipo em um transitório retorna assembly dinâmico null.

Usar GetType em um módulo dinâmico, assine o AppDomain.AssemblyResolve eventos e chamadas 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 for encontrado e também suprime algumas outras condições de exceção, conforme descrito na seção de exceções. Algumas exceções são geradas, independentemente do valor de throwOnError. Por exemplo, se o tipo for encontrado, mas não pode ser carregado, um TypeLoadException é lançada mesmo se throwOnError é false.

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

Tipo de membro

Estático

Não estático

Construtor

Não

Não

Campo

Não

Sim. Um campo é sempre ocultar-por-nome e assinatura.

Evento

Não aplicável

A regra de sistema de tipo comum é que a herança é o mesmo que os métodos que implementam a propriedade. Reflexão trata propriedades como ocultar-por-nome e assinatura. Consulte a Observação 2 abaixo.

Método

Não

Sim. Um método (virtual e não virtual) pode ser ocultar por nome ou ocultar-por-nome e assinatura.

Tipo aninhado

Não

Não

Propriedade

Não aplicável

A regra de sistema de tipo comum é que a herança é o mesmo que os métodos que implementam a propriedade. Reflexão trata propriedades como ocultar-por-nome e assinatura. Consulte a Observação 2 abaixo.

  1. Ocultar-por-nome e assinatura considera todas as partes da assinatura, inclusive modificadores personalizados, retornam tipos, 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 são ocultar-por-nome e assinatura. Se você tiver uma propriedade com um get e um acessador set na classe base, mas a classe derivada tem apenas um acessador get, a propriedade de classe derivada oculta a propriedade de classe base e você não poderá acessar o setter na classe base.

  3. Atributos personalizados não fazem parte do common type system.

Matrizes ou tipos COM não são pesquisados, a menos que já foram carregadas na tabela de classes disponíveis.

typeName pode ser o nome do tipo qualificado por seu namespace ou um nome qualificado do assembly que inclui uma especificação de nome do assembly. Consulte AssemblyQualifiedName.

Se typeName inclui o namespace, mas não o nome do assembly, este método pesquisa somente o assembly do objeto de chamada e mscorlib. dll, nessa ordem. Se typeName é totalmente qualificado com o nome parcial ou completo do assembly, esse método procura no assembly especificado. Se o assembly tiver um nome forte, é necessário um nome de assembly completo.

O 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 a 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.

System_CAPS_noteObservação

No .NET Framework versão 2.0, a arquitetura do processador é Adicionado a identidade conjunto de módulos (assembly) e pode ser especificado como parte do conjunto de módulos (assembly) Nome Cadeia de caracteres. Por exemplo, "ProcessorArchitecture = msil". No entanto, ele não está incluído na cadeia de caracteres retornada pelo AssemblyQualifiedName propriedade, por razões de compatibilidade. Você também pode carregar tipos criando um AssemblyName objeto e passá-la para uma sobrecarga apropriada de Load método. Você pode usar o Assembly.GetType método 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 representa o número de parâmetros de tipo, localizado no final do nome de um tipo genérico.

Colchetes ([])

Colocar 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 do assembly.

Vírgula ()

Precede o nome do Assembly.

Ponto (.)

Denota identificadores de namespace.

Sinal de adição (+)

Precede uma classe aninhada.

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

TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly

Se o namespace TopNamespace.Sub+Namespace, a cadeia de caracteres seria necessário preceder o sinal de adição (+) com um caractere de escape (\) para impedir que ele seja interpretado como um separador de aninhamento. Reflexão emite essa cadeia de caracteres da seguinte maneira:

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

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

Esse nome qualificado pode ser mantido e posteriormente usado para carregar o Type. Para pesquisar e carregar um Type, use GetType com o tipo de nome ou com o nome de tipo qualificado do assembly. GetType com o tipo de nome só irá procurar o Type no assembly do chamador e, em seguida, no assembly System. GetType com o assembly de nome de tipo qualificado irá 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, um tipo de ponteiro ou um tipo de matriz. Para recuperar o nome do tipo sem esses caracteres à direita, use t.GetElementType().ToString(), onde t é o tipo.

Espaços são relevantes em todos os componentes de nome de tipo, exceto o nome do assembly. O 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 representa o número de argumentos de tipo genérico. A finalidade de desconfiguração esse nome é permitir que os compiladores dar suporte a tipos genéricos com o mesmo nome, mas com diferentes números de parâmetros de tipo, que ocorrem no mesmo escopo. Por exemplo, a reflexão retorna os nomes desconfigurados Tuple`1 e Tuple`2 de métodos genéricos Tuple(Of T) e Tuple(Of T0, T1) no Visual Basic, ou Tuple<T> e tupla<T0, T1> no Visual c#.

Para tipos genéricos, a lista de argumentos de tipo entre colchetes e os argumentos de tipo são separados por vírgulas. Por exemplo, um genérico Dictionary<TKey, TValue> tem dois parâmetros de tipo. Um Dictionary<TKey, TValue> de MyType com as chaves do tipo String pode ser representado como segue:

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

Para especificar um tipo qualificado do assembly dentro de uma lista de argumentos de tipo, coloque o tipo qualificado do assembly dentro de colchetes. Caso contrário, as vírgulas que separam as partes do nome qualificado do assembly são interpretadas como argumentos de tipo adicionais de delimitação. Por exemplo, um Dictionary<TKey, TValue> de MyType de myAssembly. dll, com as chaves do tipo String, pode ser especificada da seguinte maneira:

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

Um tipo qualificado do assembly pode estar entre colchetes somente quando ele for exibido 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 iguais às regras para tipos não genéricos qualificados e não qualificados.

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

System_CAPS_noteObservação

No c#, C++ e Visual Basic, você também pode obter usando operadores de tipo de tipos anuláveis. Por exemplo, o anulável Boolean tipo retornado pelo typeof(Nullable<bool>) em c#, por Nullable<Boolean>::typeid em C++ e pelo 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

Use

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 em um ponteiro para MyType

Type.GetType("MyType**")

Um ponteiro gerenciado ou uma referência para MyType

Type.GetType("MyType&"). Observe que, ao contrário dos ponteiros, 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 0

Type.GetType("MyArray[]")

Uma matriz unidimensional com um limite inferior desconhecido

Type.GetType("MyArray[*]")

Uma matriz de n-dimensional

Uma vírgula (,) dentro dos colchetes um total de vezes que n-1. Por exemplo, System.Object[,,] representa um tridimensional Object matriz.

Matriz de uma matriz bidimensional

Type.GetType("MyArray[][]")

Uma matriz bidimensional retangular com limites inferiores do desconhecido

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 do assembly

Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]")

Um tipo genérico qualificado do assembly com um argumento de tipo qualificado do assembly

Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly")

Um tipo genérico cujo tipo de argumento é um tipo genérico com dois argumentos de tipo

Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]")

O exemplo a seguir recupera o tipo de System.Int32 e usa esse objeto de tipo para exibir o FullName propriedade System.Int32. Se um objeto do tipo se refere a um assembly que não existe, este exemplo gera 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

Universal Windows Platform
Disponível desde 8
.NET Framework
Disponível desde 1.1
Portable Class Library
Com suporte em: portable .NET platforms
Silverlight
Disponível desde 2.0
Windows Phone Silverlight
Disponível desde 7.0
Windows Phone
Disponível desde 8.1
Retornar ao topo
Mostrar:
© 2016 Microsoft