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)

 

Publicado: octubre de 2016

Obtiene el objeto Type con el nombre especificado, mediante una búsqueda en la que se distingue entre mayúsculas y minúsculas.

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

public static Type GetType(
	string typeName
)

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.

Valor devuelto

Type: System.Type

Tipo con el nombre especificado, si se encuentra; de lo contrario null.

Exception Condition
ArgumentNullException

El valor de typeName es null.

TargetInvocationException

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

ArgumentException

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.

TypeLoadException

typeName representa una matriz de TypedReference.

FileLoadException
System_CAPS_noteNota

En el .NET for Windows Store apps o biblioteca de clases Portable, detecte la excepción de la clase base, IOException, en su lugar.

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 de espacio de nombres. GetType hace que se cargue el ensamblado especificado en typeName. También puede cargar un ensamblado mediante el Load método y, a continuación, utilice el GetType o GetTypes métodos de la Assembly para obtener Type objetos. Si un tipo está en un ensamblado conocido por su programa en tiempo de compilación, resulta más eficaz utilizar en C#, GetType en Visual Basic o C++.

System_CAPS_noteNota

Si typeName no se encuentra, la llamada a la GetType(String) método devuelve null. No se produce una excepción. Para controlar si se produce una excepción, llamar a una sobrecarga de la GetType método que tiene un throwOnError parámetro.

GetTypeGetType sólo funciona en ensamblados cargados del disco. Si se llama a GetType para buscar un tipo definido en un ensamblado dinámico definido mediante el System.Reflection.Emit servicios, podría producirse un comportamiento incoherente. El comportamiento depende de que el ensamblado dinámico sea 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 llamado, el cargador busca el ensamblado guardado en el disco, carga dicho ensamblado y recupera el tipo del ensamblado. Si el ensamblado no se ha guardado en el disco cuando GetType se llama, el método devuelve null. GetType no entiende los ensamblados dinámicos transitorios; por lo tanto, una llamada a GetType para recuperar un tipo en un transitorio devuelve el ensamblado dinámico null.

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

La siguiente tabla muestra qué miembros de una clase base que son devueltos por el Get métodos cuando se reflejan en un tipo.

Tipo de miembro

Estático

No estático

Constructor

No

No

Campo

No

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

Evento

No es aplicable

La regla de sistema de tipos común es que la herencia es igual que el de los métodos que implementan 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 (tanto virtual como no virtual) puede ser ocultar por nombre u ocultar por nombre y firma.

Tipo anidado

No

No

Propiedad

No es aplicable

La regla de sistema de tipos común es que la herencia es igual que el de los métodos que implementan 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, devolución 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 son ocultar por nombre y firma. Si tiene una propiedad con una operación get y un descriptor de acceso set de la clase base, pero la clase derivada tiene sólo un descriptor de acceso get, la propiedad de la 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.

typeName puede ser el nombre de tipo calificado por su espacio de nombres o un nombre completo de 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 llamador y Mscorlib.dll, en ese orden. Si typeName es un nombre completo con el nombre de ensamblado parcial o totalmente, 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 de ensamblado y argumentos de tipo genérico. 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 se 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 pasarlo a una sobrecarga adecuada de la Load (método). A continuación, puede usar el Assembly.GetType 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 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 se puede conservar y después utilizar para cargar la Type. Para buscar y cargar un Type, utilice GetType con el tipo de nombre solo o con el nombre de tipo calificado de ensamblado. GetType con el tipo de nombre sólo buscará el Type en el ensamblado del llamador y, a continuación, en el ensamblado del sistema. GetType con el ensamblado de nombre completo del tipo buscará la Type en 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, 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 (') seguida 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. Un Dictionary<TKey, TValue> de MyType con claves de tipo String puede representarse como sigue:

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

Para especificar un tipo calificado con el ensamblado en 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 deMyAssembly.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 de ensamblado completo se puede encerrar entre corchetes sólo cuando aparece dentro de una lista de parámetros de tipo. Las reglas para buscar ensamblados para 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, el que acepta 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.

La siguiente tabla muestra la sintaxis que se utiliza con GetType para varios tipos.

Para obtener

Uso

Una que acepta valores null Int32

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

Un puntero no administrado a MyType

Type.GetType("MyType*")

Un puntero no administrado a un puntero a MyType

Type.GetType("MyType**")

Un puntero administrado o una referencia a MyType

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("MyType[]")

Una matriz unidimensional con un límite inferior desconocido

Type.GetType("MyType[*]")

Una matriz de n dimensiones

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

Una matriz de matrices unidimensionales

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

Una matriz bidimensional rectangular con límites inferiores desconocidos

Type.GetType("MyType[,]")

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 con el ensamblado

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

Un tipo genérico calificado con el ensamblado con un argumento de tipo calificado con el 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]]")

En el ejemplo siguiente se recupera el tipo de System.Int32 y usa ese objeto de tipo para mostrar el FullName propiedad de System.Int32.

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

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 1.1
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Windows Phone
Disponible desde 8.1
Volver al principio
Mostrar: