Especificando tipo nomes totalmente qualificados

Você deve especificar nomes de tipo para ter uma entrada válida para várias operações de reflexão. Um nome de tipo totalmente qualificado consiste em uma especificação de nome de assembly, uma especificação de espaço para nome e um nome de tipo. Especificações de nome de tipo são usadas por métodos como Type.GetType, Module.GetType, ModuleBuilder.GetType, e Assembly.GetType.

Gramática de forma de Backus-Naur para nomes de tipo

O formulário de Backus-Naur (BNF) define a sintaxe das linguagens formais. A tabela a seguir lista as regras lexicais BNF que descrevem como reconhecer uma entrada válida. Terminais (esses elementos que não estejam mais reducible) são mostradas em letras maiúsculas. Nonterminals (esses elementos são ainda mais reducible) são mostrados em seqüências de caracteres de caso-misto ou individualmente entre aspas, mas a aspa simples (') não é uma parte da sintaxe própria. O caractere de pipe (|) indica que as regras que têm sub-regras.

Gramática BNF dos nomes de tipo totalmente qualificado

TypeSpec: = ReferenceTypeSpec

                                        |     SimpleTypeSpec

ReferenceTypeSpec: = SimpleTypeSpec 'e'

SimpleTypeSpec: = PointerTypeSpec

                                        |     ArrayTypeSpec

                                        |     TypeName

PointerTypeSpec: = SimpleTypeSpec ' *'

ArrayTypeSpec: = SimpleTypeSpec '[ReflectionDimension]'

                                        |     SimpleTypeSpec '[ReflectionEmitDimension]'

ReflectionDimension: = ' *'

                                        |     ReflectionDimension ',' ReflectionDimension

                                        |     NOTOKEN

ReflectionEmitDimension: = ' *'

                                        |     Número '..' Número

                                        |     Número '…'

                                        |     ReflectionDimension ',' ReflectionDimension

                                        |     NOTOKEN

Number                            :=   [0-9]+

TypeName: = NamespaceTypeName

                                        |     NamespaceTypeName ',' AssemblyNameSpec

NamespaceTypeName: = NestedTypeName

                                        |     NamespaceSpec '.' NestedTypeName

NestedTypeName: = identificador

                                        |     NestedTypeName '+' IDENTIFICADOR

NamespaceSpec: = identificador

                                        |     NamespaceSpec '.' IDENTIFICADOR

AssemblyNameSpec: = identificador

                                        |     IDENTIFICADOR ',' AssemblyProperties

AssemblyProperties: = AssemblyProperty

                                        |     AssemblyProperties ',' AssemblyProperty

AssemblyProperty: = AssemblyPropertyName de '=' AssemblyPropertyValue

Especificar caracteres especiais

Um nome de tipo, o identificador é qualquer nome válido de determinada pelas regras de um idioma.

Use a barra invertida (\) como um caractere de escape para separar os símbolos a seguir, quando usado como parte do identificador.

Token

Significado

\,

Separador de assembly.

\+

Separador de tipo aninhado.

\&

Tipo de referência.

\*

Tipo de ponteiro.

\[

Delimitador de dimensão da matriz.

\]

Delimitador de dimensão da matriz.

\.

Use a barra invertida antes de um ponto somente se o período for usado em uma especificação de matriz. Períodos de NamespaceSpec não terão a barra invertida.

\\

Barra invertida quando necessário como uma seqüência de caracteres literal.

Observe que, em todos os componentes de TypeSpec exceto AssemblyNameSpec, espaços são relevantes. No AssemblyNameSpec, espaços antes do ',' separador são relevante, mas espaços após a ',' separador são ignorados.

Classes de reflexão, como Type.FullName, retornar o nome desconfigurado, para que o nome retornado pode ser usado em uma chamada para GetType, como em MyType.GetType(myType.FullName).

Por exemplo, talvez o nome totalmente qualificado para um tipo de Ozzy.OutBack.Kangaroo+Wallaby,MyAssembly.

Se o namespace Ozzy.Out+Back, o sinal deve ser precedido por uma barra invertida. Caso contrário, o analisador seria interpretá-lo como um separador de aninhamento. Reflexão emite a seqüência de caracteres como Ozzy.Out\+Back.Kangaroo+Wallaby,MyAssembly.

Especificando nomes de Assembly

As informações mínimas necessárias em uma especificação de nome do assembly são o nome textual (identificador) do assembly. Você pode seguir o identificador por uma lista separada por ponto-e-vírgula de pares de propriedade/valor, conforme descrito na tabela a seguir. IDENTIFICADOR de nomeação deve seguir as regras de nomenclatura de arquivo. O identificador não diferencia maiúsculas de minúsculas.

Nome de propriedade

Descrição

Valores permitidos

Versão

Número de versão do assembly

Major.Minor.Build.Revision, onde principais, secundária, Build, e Revisão são números inteiros entre 0 e 65535 inclusiva.

PublicKey

Chave pública completa

Seqüência de valor de chave pública completa em formato hexadecimal. Especificar uma referência nula (nada em Visual Basic) para indicar explicitamente um assembly particular.

PublicKeyToken

Token de chave pública (8 bytes de hash da chave pública completa)

Seqüência de valor do token de chave pública em formato hexadecimal. Especificar uma referência nula (nada em Visual Basic) para indicar explicitamente um assembly particular.

Cultura

Cultura de assembly

Cultura do assembly em formato de RFC 1766 ou "neutral" para assemblies independente de linguagem (nonsatellite).

Personalizado

Personalizado grande BLOB (objeto binário). Isso é atualmente usado apenas em assemblies gerados pelo Native Image Generator (ngen).

Seqüência de caracteres personalizada usada pela ferramenta Native Image Generator para notificar o cache de assembly que o conjunto que está sendo instalada é uma imagem nativa e, portanto, para ser instalado no cache de imagem nativa. Também chamado de uma seqüência de caracteres de zap.

A exemplo a seguir mostra um AssemblyName para um conjunto nomeado simplesmente com a cultura padrão.

com.microsoft.crypto, Culture="" 

O exemplo a seguir mostra uma referência totalmente especificada para um assembly fortemente nomeado com a cultura "en".

com.microsoft.crypto, Culture=en, PublicKeyToken=a5d015c7d5a0b012,
    Version=1.0.0.0 

Os exemplos a seguir cada mostram parcialmente especificado AssemblyName, que podem ser atendidas por um forte ou um conjunto nomeado simplesmente.

com.microsoft.crypto
com.microsoft.crypto, Culture=""
com.microsoft.crypto, Culture=en 

Os exemplos a seguir cada mostram parcialmente especificado AssemblyName, que devem ser atendidos por um conjunto nomeado simplesmente.

com.microsoft.crypto, Culture="", PublicKeyToken=null 
com.microsoft.crypto, Culture=en, PublicKeyToken=null

Os exemplos a seguir cada mostram parcialmente especificado AssemblyName, que devem ser atendidos por um assembly fortemente nomeado.

com.microsoft.crypto, Culture="", PublicKeyToken=a5d015c7d5a0b012
com.microsoft.crypto, Culture=en, PublicKeyToken=a5d015c7d5a0b012,
    Version=1.0.0.0

A especificação de ponteiros

SimpleTypeSpec * representa um ponteiro não gerenciado. Por exemplo, para obter um ponteiro para digitar MyType, use Type.GetType("MyType*"). Para obter um ponteiro para um ponteiro para digitar MyType, use Type.GetType("MyType**").

A especificação de referências

SimpleTypeSpec & representa um ponteiro gerenciado ou referência. Por exemplo, para obter uma referência ao tipo de MyType, use Type.GetType("MyType &"). Observe que, diferentemente de ponteiros, referências são limitadas a um nível.

A especificação de Arrays

Na gramática BNF, ReflectionEmitDimension só se aplica às definições de tipo incompleta recuperadas usando ModuleBuilder.GetType. As definições de tipo incompletos são TypeBuilder objetos construídos usando Reflection. Emit , mas no qual TypeBuilder.CreateType não foi chamado. ReflectionDimension pode ser usado para recuperar qualquer definição de tipo que foi concluída, ou seja, um tipo que foi carregado.

Arrays são acessados na reflexão, especificando a classificação da matriz:

  • Type.GetType("MyArray[]")Obtém uma matriz de dimensão única com o limite inferior 0.

  • Type.GetType("MyArray[*]")Obtém uma matriz de dimensão única com o limite inferior desconhecido.

  • Type.GetType("MyArray[][]")Obtém a matriz de uma matriz bidimensional.

  • Type.GetType("MyArray[*,*]")e Type.GetType("MyArray[,]") obtém uma matriz bidimensional retangular com limites inferiores desconhecido.

Observe que, do ponto de vista do tempo de execução, MyArray[] != MyArray[*], mas de matrizes multidimensionais, duas notações são equivalente. Ou seja, Type.GetType("MyArray [,]") == Type.GetType("MyArray[*,*]") for avaliada como true.

Para ModuleBuilder.GetType, MyArray[0..5] indica uma matriz de dimensão única com tamanho 6, menor vinculado 0. MyArray[4…] indica uma matriz de dimensão única de tamanho desconhecido e o limite inferior 4.

Consulte também

Referência

AssemblyName

ModuleBuilder

TypeBuilder

Type.FullName

Type.GetType

Type.AssemblyQualifiedName

Conceitos

Exibindo informações de tipo