Type.GetType Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Obtém um 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.
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 da API complementar 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 do 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 objeto de tipo 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. |
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.
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.
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
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Especificando nomes de tipo totalmente qualificados
Aplica-se a
GetType(String, Boolean)
- Origem:
- Type.CoreCLR.cs
- Origem:
- Type.CoreCLR.cs
- Origem:
- Type.CoreCLR.cs
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. |
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.
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.
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 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. |
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
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 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("MyArray[]") |
Uma matriz unidimensional com um limite inferior desconhecido | Type.GetType("MyArray[*]") |
Uma matriz ndimensional | Uma vírgula (,) dentro dos colchetes um total de n-1 vezes. Por exemplo, System.Object[,,] representa uma matriz tridimensional Object . |
Uma matriz bidimensional | Type.GetType("MyArray[][]") |
Uma matriz bidimensional retangular com limites inferiores desconhecidos | Type.GetType("MyArray[,]") |
Um tipo genérico com um argumento de tipo | Type.GetType("MyGenericType`1[MyType]") |
Um tipo genérico com dois argumentos de tipo | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
Um tipo genérico com dois argumentos de tipo 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
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Especificando nomes de tipo totalmente qualificados
Aplica-se a
GetType(String, Boolean, Boolean)
- Origem:
- Type.CoreCLR.cs
- Origem:
- Type.CoreCLR.cs
- Origem:
- Type.CoreCLR.cs
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. |
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.
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.
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
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Especificando nomes de tipo totalmente qualificados
Aplica-se a
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>)
- Origem:
- Type.CoreCLR.cs
- Origem:
- Type.CoreCLR.cs
- Origem:
- Type.CoreCLR.cs
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.
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.
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 .