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, Func<AssemblyName, Assembly>, Func<Assembly, String, Boolean, Type>, Boolean, Boolean)

.NET Framework (current version)
 

Publicado: octubre de 2016

Obtiene el tipo con el nombre indicado, que especifica si se va a realizar una búsqueda sin distinguir mayúsculas de minúsculas y si se va a iniciar una excepción en caso de que el tipo no se encuentre y que, de manera opcional, puede proporcionar métodos personalizados para resolver el ensamblado y el tipo.

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

public static Type GetType(
	string typeName,
	Func<AssemblyName, Assembly> assemblyResolver,
	Func<Assembly, string, bool, Type> typeResolver,
	bool throwOnError,
	bool ignoreCase
)

Parámetros

typeName
Type: System.String

Nombre del tipo que se va a obtener. Si se proporciona el parámetro typeResolver, el nombre del tipo puede ser cualquier cadena que typeResolver pueda resolver. Si se proporciona el parámetro assemblyResolver o se usa la resolución de tipos estándar, typeName debe ser un nombre calificado con el ensamblado (vea AssemblyQualifiedName), a menos que el tipo esté en el ensamblado que se ejecuta actualmente o en Mscorlib.dll, en cuyo caso basta con aplicar el nombre de tipo calificado con su espacio de nombres.

assemblyResolver
Type: System.Func<AssemblyName, Assembly>

Método que busca y devuelve el ensamblado especificado en typeName. El nombre del ensamblado se pasa a assemblyResolver como un objeto AssemblyName. Si typeName no contiene el nombre de un ensamblado, no se llama a assemblyResolver. Si no se proporciona assemblyResolver, se realiza la resolución de ensamblados estándar.

Precaución   No pase métodos de llamadores desconocidos o que no sean de confianza. Hacerlo podría tener como resultado la elevación de privilegios para el código malintencionado. Use solo los métodos que proporciona o con los que está familiarizado.

typeResolver
Type: System.Func<Assembly, String, Boolean, Type>

Método que busca y devuelve el tipo especificado por typeName del ensamblado devuelto por assemblyResolver o mediante la resolución de ensamblados estándar. Si no se proporciona ningún ensamblado, el método podrá proporcionar uno. El método también toma un parámetro que especifica si se va a realizar una búsqueda sin distinguir mayúsculas de minúsculas; se pasa el valor de ignoreCase a ese parámetro.

Precaución   No pase métodos de llamadores desconocidos o que no sean de confianza.

throwOnError
Type: System.Boolean

Es true para producir una excepción si no se puede encontrar el tipo; es false para devolver null. Si se especifica false se suprimen otras condiciones de excepción, pero no todas. 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 bien

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

O bien

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

O bien

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

O bien

typeName representa una matriz de TypedReference.

ArgumentException

Se produce un error si el analizador obtiene de typeName un nombre de tipo y un nombre de ensamblado (por ejemplo, cuando el nombre de tipo simple incluye un carácter especial sin escape).

O bien

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 bien

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

O bien

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.

O bien

typeName contiene un nombre de ensamblado no válido.

O bien

typeName es un nombre de ensamblado válido sin un nombre de tipo.

BadImageFormatException

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

O bien

El ensamblado se compiló con una versión de Common Language Runtime posterior a la versión que está cargada actualmente.

Utilice esta sobrecarga del método y sus sobrecargas asociadas (GetType(String, Func<AssemblyName, Assembly>, Func<Assembly, String, Boolean, Type>) y GetType(String, Func<AssemblyName, Assembly>, Func<Assembly, String, Boolean, Type>, Boolean)) para reemplazar la implementación predeterminada de la GetType método con las implementaciones más flexibles. Al proporcionar sus propios métodos que resuelven los nombres de tipo y los nombres de los ensamblados que contienen, puede hacer lo siguiente:

  • Controlar qué versión de un ensamblado se carga un tipo de.

  • Proporcione otra ubicación para buscar un nombre de tipo que no incluya un nombre de ensamblado.

  • Cargar ensamblados con nombres de ensamblado parciales.

  • Devolver las subclases de System.Type que no se crean por common language runtime (CLR).

Por ejemplo, en la serialización tolerante a versiones este método le permite buscar un ensamblado "ajuste perfecto" con un nombre parcial. Otras sobrecargas de la GetType método requiere un nombre de tipo calificado por ensamblado, que incluye el número de versión.

Implementaciones alternativas del sistema de tipos pueden necesitar devolver subclases de System.Type que no se crean mediante CLR; todos los tipos que son devueltos por otras sobrecargas de la GetType método son tipos de tiempo de ejecución.

Esta sobrecarga del método y sus sobrecargas asociadas analizar typeName en el nombre de un tipo y el nombre de un ensamblado y, a continuación, resolver los nombres. Resolución del nombre del ensamblado se produce antes de la resolución del nombre de tipo, porque un nombre de tipo se debe resolver en el contexto de un ensamblado.

System_CAPS_noteNota

Si no está familiarizado con el concepto de nombres de tipo calificado por ensamblado, consulte el AssemblyQualifiedName propiedad.

Si typeName no es un nombre calificado con el ensamblado, se omite la resolución de ensamblados. Nombres de tipo incompletos se pueden resolver en el contexto de Mscorlib.dll o el ensamblado que se ejecuta actualmente o puede proporcionar opcionalmente un ensamblado en el typeResolver parámetro. Los efectos de incluir u omitir el nombre del ensamblado de tipos diferentes de resolución de nombres se muestran como una tabla en la resolución de nombre mixto sección.

Notas de uso general:

  • No pase métodos a assemblyResolver o typeResolver si proceden de llamadores desconocidos o que no se confía. Use solo los métodos que proporciona o con los que está familiarizado.

    System_CAPS_cautionPrecaución

    Uso de métodos de llamadores desconocidos o que no se confía podrían elevación de privilegios para el código malintencionado.

  • Si se omite la assemblyResolver o typeResolver parámetros, el valor de la throwOnError parámetro se pasa a los métodos que realizan la resolución predeterminada.

  • Si throwOnError es true, este método produce una TypeLoadException cuando typeResolver devuelve nully un FileNotFoundException cuando assemblyResolver devuelve null.

  • Este método no detecta las excepciones producidas por assemblyResolver y typeResolver. Usted es responsable de las excepciones producidas por los métodos de resolución.

El assemblyResolver método recibe un AssemblyName objeto, que está formado por el nombre de ensamblado de cadena que se incluye en el análisis typeName. Si typeName no contiene un nombre de ensamblado, assemblyResolver no se llama y null se pasa a typeResolver.

Si assemblyResolver no es estándar, proporcionado ensamblado sondeo se usa para buscar el ensamblado. Si assemblyResolver se proporciona, el GetType método realiza la búsqueda estándar; en ese caso debe asegurarse de que su assemblyResolver puede administrar todos los ensamblados que se pasa a él.

El assemblyResolver método debe devolver null si no se puede resolver el ensamblado. Si assemblyResolver devuelve null, typeResolver no se llama y no se realiza ningún procesamiento adicional; además, si throwOnError es true, un FileNotFoundException se produce.

Si el AssemblyName que se pasa a assemblyResolver es un partial nombre, uno o más de sus partes son null. Por ejemplo, si no tiene ninguna versión, el Version propiedad es null. Si el Version propiedad, el CultureInfo propiedad y el GetPublicKeyToken método devuelven null, a continuación, se proporciona solo el nombre simple del ensamblado. El assemblyResolver método podrá utilizar u omitir todas las partes del nombre del ensamblado.

Los efectos de las opciones de resolución de ensamblado diferentes se muestran como una tabla en la resolución de nombre mixto sección para nombres de tipo simple y ensamblado.

Si typeName no especifica un nombre de ensamblado, typeResolver siempre se llama. Si typeName especifica un nombre de ensamblado, typeResolver se llama solo cuando se ha resuelto correctamente el nombre del ensamblado. Si assemblyResolver o ensamblados estándar sondeo devuelve null, typeResolver , no se llama.

El typeResolver método recibe tres argumentos:

  • El ensamblado que se va a buscar o null si typeName no contiene un nombre de ensamblado.

  • El nombre simple del tipo. En el caso de un tipo anidado, éste es el tipo contenedor más externo. En el caso de un tipo genérico, este es el nombre simple del tipo genérico.

  • Un valor booleano que es true si es el caso de nombres de tipo que se pasen por alto.

La implementación determina la manera en que se emplean estos argumentos. El typeResolver método debe devolver null si no se puede resolver el tipo. Si typeResolver devuelve null y throwOnError es true, esta sobrecarga de GetType produce una TypeLoadException.

Los efectos de las opciones de resolución de tipo diferentes se muestran como una tabla en la resolución de nombre mixto sección para nombres de tipo simple y ensamblado.

Si typeName es un tipo anidado, solo el nombre del exterior que contiene el tipo se pasa a typeResolver. Cuando typeResolver devuelve este tipo, el GetNestedType método se llama de forma recursiva hasta que se ha resuelto el tipo anidado más interno.

El GetType se llama de forma recursiva para resolver tipos genéricos: primero para resolver el tipo genérico y después se resuelven sus argumentos de tipo. Si un argumento de tipo es genérico, GetType se llama de forma recursiva para resolver sus argumentos de tipo y así sucesivamente.

La combinación de assemblyResolver y typeResolver que proporcione debe ser capaz de resolver todos los niveles de esta recursividad. Por ejemplo, suponga que proporciona un assemblyResolver que controla la carga de MyAssembly. Imagine que desea resolver el tipo genérico Dictionary<string, MyType> (Dictionary(Of String, MyType) en Visual Basic). Se puede pasar el nombre de tipo genérico siguiente:

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

Tenga en cuenta que MyType es el argumento de tipo calificado por ensamblado solo. Los nombres de los Dictionary<TKey, TValue> y String clases no están calificado con el ensamblado. Su typeResolver debe controlar ya sea un ensamblado o null, ya que recibirá una excepción null para Dictionary<TKey, TValue> y String. Puede administrar ese caso llamando a una sobrecarga de la GetType método que toma una cadena, porque ambos de los nombres de tipo incompletos están en Mscorlib.dll:

Type t = Type.GetType(test,
                      (aName) => aName.Name == "MyAssembly" ? 
                          Assembly.LoadFrom(@".\MyPath\v5.0\MyAssembly.dll") : null,
                      (assem, name, ignore) => assem == null ? 
                          Type.GetType(name, false, ignore) : 
                              assem.GetType(name, false, ignore)
                     ); 

El assemblyResolver método no se llama para el tipo de diccionario y el tipo de cadena, porque esos nombres de tipo no están calificado con el ensamblado.

Ahora suponga que en lugar de System.String, el primer tipo de argumento genérico es YourType, de YourAssembly:

"System.Collections.Generic.Dictionary`2[[YourNamespace.YourType, YourAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null], [MyNamespace.MyType, MyAssembly]]"

Dado que este ensamblado es ni Mscorlib.dll ni el ensamblado que se ejecuta actualmente, no se puede resolver YourType no tiene un nombre calificado con el ensamblado. Dado que su assemblyResolve será llama de forma recursiva, debe ser capaz de tratar este caso. En lugar de devolver null ensamblados distinto MyAssembly, ahora se realiza una carga de ensamblado con el AssemblyName objeto.

Type t2 = Type.GetType(test,
                       (aName) => aName.Name == "MyAssembly" ? 
                           Assembly.LoadFrom(@".\MyPath\v5.0\MyAssembly.dll") : 
                           Assembly.Load(aName),
                       (assem, name, ignore) => assem == null ? 
                           Type.GetType(name, false, ignore) : 
                               assem.GetType(name, false, ignore), true
                      ); 

Volver a notas de uso.

Ciertos caracteres tienen significados especiales en los nombres de ensamblado. Si un nombre de tipo simple contiene estos caracteres, los caracteres producen errores de análisis cuando el nombre sencillo forma parte de un nombre calificado con el ensamblado. Para evitar los errores del análisis, debe indicar los caracteres especiales con una barra diagonal inversa antes de pasar el nombre calificado con el ensamblado a la GetType método. Por ejemplo, si un tipo se denomina Strange]Type, debe agregarse el carácter de escape delante del corchete como sigue: Strange\]Type.

System_CAPS_noteNota

Los nombres con estos caracteres especiales no se puede crear en Visual Basic o C#, pero pueden crearse mediante el lenguaje intermedio de Microsoft (MSIL) o emitir ensamblados dinámicos.

La tabla siguiente muestran los caracteres especiales para nombres de tipo.

Carácter

Significado

, (coma)

Delimitador para los nombres de ensamblado.

[] (corchetes)

Como un par de sufijo, indica un tipo de matriz; como un par de delimitador, agrega listas de argumentos genéricas y nombres calificados con el ensamblado.

& (símbolo de Y comercial)

Como sufijo, indica que un tipo es un tipo de referencia.

* (asterisco)

Como sufijo, indica que un tipo es un tipo de puntero.

+ (signo más)

Delimitador para los tipos anidados.

\ (barra diagonal inversa)

Carácter de escape.

Propiedades como AssemblyQualifiedName devuelto correctamente las cadenas de caracteres de escape. Debe pasar correctamente cadenas de escape para el GetType método. A su vez, el GetType método pasa los nombres de escape correctamente a typeResolver y a los métodos de resolución de tipo predeterminado. Si necesita comparar un nombre con un nombre sin escape en typeResolver, debe quitar los caracteres de escape.

Volver a notas de uso.

En la tabla siguiente se resume las interacciones entre assemblyResolver, typeResolvery resolución de nombres de forma predeterminada, para todas las combinaciones de nombre de tipo y nombre del ensamblado typeName:

Contenido de nombre de tipo

Método de resolución de ensamblado

Método de resolución de tipo

Resultado

tipo de ensamblado

nulo

nulo

Equivalente a llamar a la Type.GetType(String, Boolean, Boolean) sobrecarga del método.

tipo de ensamblado

Proporciona

nulo

assemblyResolverDevuelve el ensamblado o devuelve null si no se puede resolver el ensamblado. Si el ensamblado se ha resuelto, el Assembly.GetType(String, Boolean, Boolean) sobrecarga del método se usa para cargar el tipo del ensamblado; en caso contrario, no hay ningún intento para resolver el tipo.

tipo de ensamblado

nulo

Proporciona

Equivalente a convertir el nombre del ensamblado a un AssemblyName objeto y llamar a la Assembly.Load(AssemblyName) sobrecarga del método para obtener el ensamblado. Si el ensamblado se resuelve, se pasa a typeResolver; en caso contrario, typeResolver no se llama y no hay ningún intento adicional para resolver el tipo.

tipo de ensamblado

Proporciona

Proporciona

assemblyResolverDevuelve el ensamblado o devuelve null si no se puede resolver el ensamblado. Si el ensamblado se resuelve, se pasa a typeResolver; en caso contrario, typeResolver no se llama y no hay ningún intento adicional para resolver el tipo.

tipo

null, proporcionado

nulo

Equivalente a llamar a la Type.GetType(String, Boolean, Boolean) sobrecarga del método. Porque no se proporcionó el nombre del ensamblado, se buscan sólo Mscorlib.dll y ensamblado actualmente en ejecución. Si assemblyResolver es siempre se omite.

tipo

null, proporcionado

Proporciona

typeResolverse llama a, y null se pasa para el ensamblado. typeResolverpuede proporcionar un tipo de cualquier ensamblado, incluidos los ensamblados que se carga para el propósito. Si assemblyResolver es siempre se omite.

assembly

null, proporcionado

null, proporcionado

Un FileLoadException se produce porque el nombre del ensamblado se analiza como si fuera un nombre de tipo calificado con el ensamblado. Esto da como resultado un nombre de ensamblado no válido.

Volver a: notas de uso, resolver ensamblados, resolver los tipos.

.NET Framework
Disponible desde 4.0
Volver al principio
Mostrar: