Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Método Type.GetType (String, Boolean, Boolean)

 

Publicado: octubre de 2016

Obtiene el Type con el nombre indicado, que especifica si se genera una excepción en caso de que no se encuentre el tipo y si se va a realizar una búsqueda donde se distingue entre mayúsculas y minúsculas.

Espacio de nombres:   System
Ensamblado:  mscorlib (en mscorlib.dll)

public static Type GetType(
	string typeName,
	bool throwOnError,
	bool ignoreCase
)

Parámetros

typeName
Type: System.String

Nombre calificado con el ensamblado del tipo que se va a obtener. Vea AssemblyQualifiedName. Si el tipo está en el ensamblado que se ejecuta actualmente o en Mscorlib.dll, es suficiente para proporcionar el nombre completo del tipo por su espacio de nombres.

throwOnError
Type: System.Boolean

true para producir una excepción si no se puede encontrar el tipo; false para devolver null. Especificar false también suprime algunas otras condiciones de excepción, pero no todas ellas. Vea la sección Excepciones.

ignoreCase
Type: System.Boolean

true para realizar una búsqueda de typeName que no distinga entre mayúsculas y minúsculas; false para realizar una búsqueda de typeName que distinga entre mayúsculas y minúsculas.

Valor devuelto

Type: System.Type

Tipo con el nombre especificado. Si el tipo no se encuentra, el parámetro throwOnError especifica si se devuelve null o se produce una excepción. En algunos casos, se produce una excepción con independencia del valor de throwOnError. Vea la sección Excepciones.

Exception Condition
ArgumentNullException

El valor de typeName es null.

TargetInvocationException

Se invoca un inicializador de clase y genera una excepción.

TypeLoadException

throwOnError es true y no se encuentra el tipo.

-o-

throwOnError es true y typeName contiene caracteres no válidos, como una pestaña insertada.

-o-

throwOnError es true y typeName es una cadena vacía.

-o-

throwOnError es true y typeName representa un tipo de matriz con un tamaño no válido.

-o-

typeName representa una matriz de TypedReference.

ArgumentException

throwOnError es true y typeName contiene sintaxis no válida. Por ejemplo: "MyType[,*,]".

O bien

typeName representa un tipo genérico que tiene un tipo de puntero, un tipo ByRef o Void como uno de sus argumentos de tipo.

-o-

typeName representa un tipo genérico que tiene un número incorrecto de argumentos de tipo.

-o-

typeName representa un tipo genérico y uno de sus argumentos de tipo no satisface las restricciones del parámetro de tipo correspondiente.

FileNotFoundException

throwOnError es true y no se encontró el ensamblado o alguna de sus dependencias.

FileLoadException

Se encontró el ensamblado o una de sus dependencias, pero no se pudo cargar.

BadImageFormatException

El ensamblado o alguna de sus dependencias no son válidos.

-o-

Actualmente, está cargada la versión 2.0 u otra posterior de Common Language Runtime pero el ensamblado se compiló con una versión posterior.

Puede usar el GetType método para obtener un Type de objeto para un tipo en otro ensamblado, si conoce su nombre calificado de espacio de nombres. GetTypehace que se cargue el ensamblado especificado en typeName. También puede cargar un ensamblado con el Loadmétodo y, a continuación, utilice la GetType o GetTypes métodos de la Assembly clase para obtener Type objetos. Si un tipo está en un ensamblado que se sabe que el programa en tiempo de compilación, resulta más eficaz utilizar typeof en C#, GetType en Visual Basic, o typeid en C++.

GetTypesolo funciona en los ensamblados cargados desde el disco. Si se llama a GetType para buscar un tipo definido en un ensamblado dinámico definido mediante el System.Reflection.Emit services, podría producirse un comportamiento incoherente. El comportamiento depende de si el ensamblado dinámico es persistente, es decir, se crea usando el RunAndSave o Save modos de acceso a la System.Reflection.Emit.AssemblyBuilderAccess enumeración. Si el ensamblado dinámico es persistente y se ha escrito en el disco antes de GetType es llama, el cargador busca el ensamblado guardado en disco, carga ese ensamblado y recupera el tipo de ese ensamblado. Si el ensamblado no se ha guardado en el disco cuando GetType se llama, el método devuelve null. GetTypeno entiende los ensamblados dinámicos transitorios; por lo tanto, al llamar a GetType para recuperar un tipo en un transitorio devuelve el ensamblado dinámico null.

Usar GetType en un módulo dinámico, suscribirse a la AppDomain.AssemblyResolve eventos y llame al método GetType antes de guardar. De lo contrario, obtendrá dos copias del ensamblado en la memoria.

El throwOnError parámetro especifica lo que ocurre cuando no se encuentra el tipo y también suprime algunas condiciones de excepción, como se describe en la sección excepciones. Algunas excepciones se producen independientemente del valor de throwOnError. Por ejemplo, si se encuentra el tipo pero no se puede cargar, un TypeLoadException se produce incluso si throwOnError es false.

La siguiente tabla muestra qué miembros de una clase base se devuelven los Get métodos cuando se reflejan en un tipo.

Tipo de miembro

Estático

No estáticos

Constructor

No

No

Campo

No

Sí. Un campo siempre es ocultar por nombre y firma.

Evento

No es aplicable

La regla de sistema de tipo común es que la herencia es igual que la de los métodos que implementa la propiedad. La reflexión trata las propiedades como ocultar por nombre y firma. Véase la nota 2.

Método

No

Sí. Un método (virtual y no virtuales) pueden ocultar por nombre u ocultar por nombre y firma.

Tipo anidado

No

No

Propiedad

No es aplicable

La regla de sistema de tipo común es que la herencia es igual que la de los métodos que implementa la propiedad. La reflexión trata las propiedades como ocultar por nombre y firma. Véase la nota 2.

  1. Ocultar por nombre y firma considera que todas las partes de la firma, incluidos los modificadores personalizados, devuelven tipos, tipos de parámetro, centinelas y las convenciones de llamada no administradas. Se trata de una comparación binaria.

  2. Para la reflexión, propiedades y eventos están ocultos por nombre y firma. Si tiene una propiedad con una operación get y un descriptor de acceso de la clase base, pero la clase derivada tiene solo un descriptor de acceso get, la propiedad de clase derivada oculta la propiedad de clase base y no podrá tener acceso el establecedor de la clase base.

  3. Atributos personalizados no forman parte del sistema de tipos comunes.

Las matrices o los tipos COM no se buscan, a menos que ya se han cargado en la tabla de clases disponibles.

typeNamepuede ser el nombre de tipo calificado por su espacio de nombres o un nombre calificado con el ensamblado que incluya una especificación de nombre de ensamblado. Vea AssemblyQualifiedName.

Si typeName incluye el espacio de nombres pero no el nombre del ensamblado, este método busca solo ensamblado del objeto que realiza la llamada y Mscorlib.dll, en ese orden. Si typeName es un nombre completo que incluye el nombre del ensamblado parcial o completo, este método busca en el ensamblado especificado. Si el ensamblado tiene un nombre seguro, se requiere un nombre de ensamblado completo.

El AssemblyQualifiedName propiedad devuelve un nombre de tipo completo, incluidos los tipos anidados, el nombre del ensamblado y los argumentos de tipo. Todos los compiladores que admiten common language runtime emitirán el nombre sencillo de una clase anidada y la reflexión construirá un nombre con sufijo cuando ejecute la consulta, con arreglo a las siguientes convenciones.

System_CAPS_noteNota

En la versión 2.0 de .NET Framework, la arquitectura de procesador se agrega a la identidad del ensamblado y se puede especificar como parte de las cadenas de nombre de ensamblado. Por ejemplo, "ProcessorArchitecture = msil". Sin embargo, no se incluye en la cadena devuelta por la AssemblyQualifiedName propiedad por motivos de compatibilidad. También puede cargar tipos creando un AssemblyName objeto y pasarla a una sobrecarga adecuada de la Load (método). A continuación, puede usar el Assembly.GetType método para cargar tipos del ensamblado. Vea también AssemblyName.ProcessorArchitecture.

Delimitador

Significado

Barra diagonal inversa (\)

Carácter de escape.

Acento grave (')

Precede a uno o más dígitos que representa el número de parámetros de tipo, situado al final del nombre de un tipo genérico.

Corchetes ([])

Incluya una lista de argumentos de tipo genérico para un tipo genérico construido; dentro de una lista de argumentos de tipo, encierra un tipo calificado con el ensamblado.

Coma (,)

Precede al nombre de ensamblado.

Punto (.)

Denota los identificadores de espacio de nombres.

Signo más (+)

Precede a una clase anidada.

Por ejemplo, el nombre completo para una clase podría ser similar al siguiente:

TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly

Si el espacio de nombres fuera EspacioNombresPrincipal. Sub+EspacioNombres, la cadena tendría que ir delante del signo más (+) con un carácter de escape (\) para evitar que se interprete como un separador de anidamiento. La reflexión emite esta cadena como sigue:

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

Un "++" se convierte en "\ + \ +" y un "\" se convierte en "\".

Este nombre completo puede se conserven y se utiliza posteriormente para cargar el Type. Para buscar y cargar un Type, utilice GetType con el tipo de nombre solo o con el nombre de tipo calificado de ensamblado. GetTypecon el tipo de nombre sólo buscará la Type en el ensamblado del llamador y, a continuación, en el ensamblado del sistema. GetTypecon el ensamblado de nombre de tipo calificado buscará la Type de cualquier ensamblado.

Nombres de tipo pueden contener caracteres finales que denoten información adicional sobre el tipo, por ejemplo, si el tipo es un tipo de referencia, un tipo de puntero o un tipo de matriz. Para recuperar el nombre del tipo sin estos caracteres finales, use t.GetElementType().ToString(), donde t es el tipo.

Los espacios son relevantes en todos los componentes de nombre de tipo excepto el nombre del ensamblado. En el nombre del ensamblado, los espacios delante del separador ',' son relevantes, pero se omiten los espacios detrás del separador ','.

El nombre de un tipo genérico finaliza con un acento grave (') seguido de dígitos que representa el número de argumentos de tipo genérico. El propósito de este nombre con sufijo es permitir que los compiladores admitir tipos genéricos con el mismo nombre pero con distintos números de parámetros de tipo, que se producen en el mismo ámbito. Por ejemplo, la reflexión devuelve los nombres alterados Tuple`1 y Tuple`2 de los métodos genéricos Tuple(Of T) y Tuple(Of T0, T1) en Visual Basic, o Tuple<T> y tupla<T0, T1> en Visual C#.

Para los tipos genéricos, la lista de argumentos de tipo se incluye entre corchetes y los argumentos de tipo están separados por comas. Por ejemplo, un tipo genérico Dictionary<TKey, TValue> tiene dos parámetros de tipo. A Dictionary<TKey, TValue> de MyType con claves de tipo String podría representarse como se indica a continuación:

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

Para especificar un tipo calificado con el ensamblado dentro de una lista de argumentos de tipo, incluya el tipo de ensamblado completo entre corchetes. De lo contrario, las comas que separan las partes del nombre completo de ensamblado se interpretan como delimitación de los argumentos de tipo adicionales. Por ejemplo, un Dictionary<TKey, TValue> de MyType en MyAssembly.dll, con claves de tipo String, se puede especificar como sigue:

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

Un tipo calificado con el ensamblado puede escribirse entre corchetes solo cuando aparece dentro de una lista de parámetros de tipo. Las reglas para buscar los ensamblados de tipos completos e incompletos en listas de parámetros de tipo son las mismas que las reglas para tipos no genéricos completos e incompletos.

Tipos que aceptan valores NULL son un caso especial de tipos genéricos. Por ejemplo, una que acepta valores NULL Int32 representado por la cadena "System.Nullable'1[System.Int32"].

System_CAPS_noteNota

En C#, C++ y Visual Basic también puede obtener tipos que aceptan valores NULL mediante operadores de tipo. Por ejemplo, las que aceptan valores NULL Boolean tipo devuelto por typeof(Nullable<bool>) en C#, por Nullable<Boolean>::typeid en C++ y por GetType(Nullable(Of Boolean)) en Visual Basic.

En la tabla siguiente se muestra la sintaxis que se usa con GetType para varios tipos.

Para obtener

Uso

Un que aceptan valores nullInt32

Type.GetType("System.Nullable`1[System.Int32]")

Un puntero no administrado aMyType

Type.GetType("MyType*")

Un puntero no administrado a un puntero aMyType

Type.GetType("MyType**")

Un puntero administrado o una referencia aMyType

Type.GetType("MyType&"). Tenga en cuenta que, a diferencia de los punteros, las referencias se limitan a un nivel.

Una clase principal y una clase anidada

Type.GetType("MyParentClass+MyNestedClass")

Una matriz unidimensional con un límite inferior de 0

Type.GetType("MyArray[]")

Una matriz unidimensional con un límite inferior desconocido

Type.GetType("MyArray[*]")

Una matriz de n dimensiones

Una coma (,) entre paréntesis un total de n-1 veces. Por ejemplo, System.Object[,,] representa un tridimensional Object matriz.

La matriz de una matriz bidimensional

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

Una matriz bidimensional rectangular con límites inferiores desconocidos

Type.GetType("MyArray[,]")

Un tipo genérico con un argumento de tipo

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

Un tipo genérico con dos argumentos de tipo

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

Un tipo genérico con dos argumentos de tipo calificado por ensamblado

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

Un tipo genérico calificado con el ensamblado con un argumento de tipo calificado por ensamblado

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

Un tipo genérico cuyo argumento de tipo es un tipo genérico con dos argumentos de tipo

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

Plataforma universal de Windows
Disponible desde 10
.NET Framework
Disponible desde 1.1
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Volver al principio
Mostrar: