Compartir a través de


Especificación de nombres de tipos completos

Debe especificar nombres de tipo para tener entradas válidas en varias operaciones de reflexión. Un nombre de tipo completo consta de una especificación de nombre de ensamblado, una especificación de espacio de nombres y un nombre de tipo. Las especificaciones de nombre de tipo se usan mediante métodos como Type.GetType, Module.GetType, ModuleBuilder.GetTypey Assembly.GetType.

Gramática para nombres de tipo

La gramática define la sintaxis de los lenguajes formales. En la tabla siguiente se enumeran las reglas léxicas que describen cómo reconocer una entrada válida. Los terminales (aquellos elementos que no son reducibles) se muestran en LETRAS MAYÚSCULAS. Los no terminales (es decir, los elementos que se pueden reducir más) se muestran en cadenas con mayúsculas y minúsculas mezcladas o en cadenas entre comillas simples, pero la comilla simple (') no forma parte de la sintaxis en sí. El carácter de canalización (|) indica las reglas que tienen subreglas.

TypeSpec
	: ReferenceTypeSpec
	| SimpleTypeSpec
	;

ReferenceTypeSpec
	: SimpleTypeSpec '&'
	;

SimpleTypeSpec
	: PointerTypeSpec
	| GenericTypeSpec
	| TypeName
	;

GenericTypeSpec
   : SimpleTypeSpec ` NUMBER

PointerTypeSpec
	: SimpleTypeSpec '*'
	;

ArrayTypeSpec
	: SimpleTypeSpec '[ReflectionDimension]'
	| SimpleTypeSpec '[ReflectionEmitDimension]'
	;

ReflectionDimension
	: '*'
	| ReflectionDimension ',' ReflectionDimension
	| NOTOKEN
	;

ReflectionEmitDimension
	: '*'
	| Number '..' Number
	| Number '…'
	| ReflectionDimension ',' ReflectionDimension
	| NOTOKEN
	;

Number
	: [0-9]+
	;

TypeName
	: NamespaceTypeName
	| NamespaceTypeName ',' AssemblyNameSpec
	;

NamespaceTypeName
	: NestedTypeName
	| NamespaceSpec '.' NestedTypeName
	;

NestedTypeName
	: IDENTIFIER
	| NestedTypeName '+' IDENTIFIER
	;

NamespaceSpec
	: IDENTIFIER
	| NamespaceSpec '.' IDENTIFIER
	;

AssemblyNameSpec
	: IDENTIFIER
	| IDENTIFIER ',' AssemblyProperties
	;

AssemblyProperties
	: AssemblyProperty
	| AssemblyProperties ',' AssemblyProperty
	;

AssemblyProperty
	: AssemblyPropertyName '=' AssemblyPropertyValue
	;

Especificar caracteres especiales

En un nombre de tipo, IDENTIFIER es cualquier nombre válido determinado por las reglas de un idioma.

Use la barra diagonal inversa (\) como carácter de escape para separar los siguientes tokens cuando se utilicen como parte de IDENTIFIER.

Seña Significado
\, Separador de ensamblados.
\+ Separador de tipos anidados.
\& Tipo de referencia.
\* Tipo de puntero.
\[ Delimitador de dimensión de matriz.
\] Delimitador de dimensión de matriz.
\. Use la barra diagonal inversa delante de un punto únicamente si el punto se usa en una especificación de matriz. Los puntos de NamespaceSpec no llevan barra diagonal inversa.
\\ Barra diagonal inversa cuando es necesaria como cadena literal.

En todos los componentes typeSpec excepto AssemblyNameSpec, los espacios son pertinentes. En AssemblyNameSpec, los espacios anteriores al separador ',' son pertinentes, pero se omiten los espacios después del separador ','.

Las clases de reflexión, como Type.FullName, devuelven el nombre transformado para que el nombre devuelto se pueda usar en una llamada a GetType, como en MyType.GetType(myType.FullName).

Por ejemplo, el nombre completo de un tipo podría ser Ozzy.OutBack.Kangaroo+Wallaby,MyAssembly.

Si el espacio de nombres fuera Ozzy.Out+Back, el signo más debería ir precedido de una barra diagonal inversa. De lo contrario, el analizador lo interpretaría como un separador de anidamiento. La reflexión emite esta cadena como Ozzy.Out\+Back.Kangaroo+Wallaby,MyAssembly.

Especificar nombres de ensamblado

La información mínima necesaria en una especificación de nombre de ensamblado es el nombre textual (IDENTIFIER) del ensamblado. Puede seguir el IDENTIFICADOR por una lista separada por comas de pares propiedad-valor, tal como se describe en la tabla siguiente. La nomenclatura de IDENTIFICADOR debe seguir las reglas para la nomenclatura de archivos. IDENTIFIER no distingue mayúsculas de minúsculas.

Nombre de propiedad Descripción Valores permitidos
Versión Número de versión del ensamblado Major.Minor.Build.Revision, donde Major, Minor, Build y Revision son enteros entre 0 y 65535 inclusive.
PublicKey Clave pública completa Valor de cadena de la clave pública completa en formato hexadecimal. Especifique una referencia nula (Nothing en Visual Basic) para indicar explícitamente un ensamblado privado.
PublicKeyToken Token de clave pública (hash de 8 bytes de la clave pública completa) Valor de cadena del token de clave pública en formato hexadecimal. Especifique una referencia nula (Nothing en Visual Basic) para indicar explícitamente un ensamblado privado.
Referencia cultural Referencia cultural del ensamblado Referencia cultural del ensamblado en formato RFC-1766, o "neutral" para los ensamblados independientes del lenguaje (no satélite).
Personalizada Objeto binario grande personalizado (BLOB). Actualmente solo se usa en ensamblados generados por el generador de imágenes nativas (Ngen). Cadena personalizada usada por la herramienta Generador de imágenes nativas para notificar a la caché de ensamblados que el ensamblado que se va a instalar es una imagen nativa y, por lo tanto, se va a instalar en la caché de imágenes nativas. También se denomina cadena ZAP.

En el ejemplo siguiente se muestra un AssemblyName para un ensamblado con nombre simple con referencia cultural predeterminada.

com.microsoft.crypto, Culture=""

En el ejemplo siguiente se muestra una referencia completa para un ensamblado con nombre seguro con la referencia cultural "en".

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

En los ejemplos siguientes se muestra un AssemblyName parcialmente especificado, que se puede resolver mediante un ensamblado con un nombre simple o seguro.

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

En los ejemplos siguientes se muestra un AssemblyName parcialmente especificado, que debe cumplirse con un ensamblado con nombre simple.

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

En los ejemplos siguientes se muestra un AssemblyName parcialmente especificado, que se debe resolver mediante un ensamblado con un nombre seguro.

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

Especificar tipos genéricos

SimpleTypeSpec'NUMBER representa un tipo genérico abierto con de 1 a n parámetros de tipo genérico. Por ejemplo, para obtener una referencia al tipo genérico abierto List<T> o al tipo genérico cerrado List<String>, use Type.GetType("System.Collections.Generic.List`1"). Para obtener una referencia al tipo genérico Dictionary<TKey,TValue>, use Type.GetType("System.Collections.Generic.Dictionary`2").

Especificar punteros

SimpleTypeSpec* representa un puntero no administrado. Por ejemplo, para obtener un puntero al tipo MyType, use Type.GetType("MyType*"). Para obtener un puntero a un puntero al tipo MyType, use Type.GetType("MyType**").

Especificar referencias

SimpleTypeSpec & representa un puntero o una referencia administrados. Por ejemplo, para obtener una referencia al tipo MyType, use Type.GetType("MyType &"). A diferencia de los punteros, las referencias se limitan a un nivel.

Especificación de matrices

En la gramática de BNF, ReflectionEmitDimension solo se aplica a las definiciones de tipo incompletas recuperadas mediante ModuleBuilder.GetType. Las definiciones de tipo incompletas son TypeBuilder objetos construidos mediante System.Reflection.Emit, a los que no se ha llamado TypeBuilder.CreateType. ReflectionDimension se puede usar para recuperar cualquier definición de tipo que se haya completado, es decir, un tipo que se haya cargado.

Para acceder a las matrices en la reflexión, especifique el rango de la matriz:

  • Type.GetType("MyArray[]") obtiene una matriz de una sola dimensión con 0 límite inferior.
  • Type.GetType("MyArray[*]") obtiene una matriz de una sola dimensión con límite inferior desconocido.
  • Type.GetType("MyArray[][]") obtiene una matriz de la matriz bidimensional.
  • Type.GetType("MyArray[*,*]") y Type.GetType("MyArray[,]") obtiene una matriz bidimensional rectangular con límites inferiores desconocidos.

Desde un punto de vista en tiempo de ejecución, MyArray[] != MyArray[*], pero para matrices multidimensionales, las dos notaciones son equivalentes. Es decir, Type.GetType("MyArray [,]") == Type.GetType("MyArray[*,*]") se evalúa como true.

Para ModuleBuilder.GetType, MyArray[0..5] indica una matriz de una sola dimensión con el tamaño 6, límite inferior 0. MyArray[4…] indica una matriz de una sola dimensión de tamaño desconocido y un límite inferior 4.

Consulte también