Exportar (0) Imprimir
Expandir todo

Type (Clase)

Actualización: noviembre 2007

Representa declaraciones de tipo: tipos de clase, tipos de interfaz, tipos de matriz, tipos de valor, tipos de enumeración, parámetros de tipo, definiciones de tipo genérico y tipos genéricos construidos abiertos o cerrados.

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

[SerializableAttribute]
[ComVisibleAttribute(true)]
[ClassInterfaceAttribute(ClassInterfaceType.None)]
public abstract class Type : MemberInfo, 
	_Type, IReflect
/** @attribute SerializableAttribute */ 
/** @attribute ComVisibleAttribute(true) */
/** @attribute ClassInterfaceAttribute(ClassInterfaceType.None) */
public abstract class Type extends MemberInfo implements _Type, 
	IReflect
public abstract class Type extends MemberInfo implements _Type, IReflect

Type es la raíz de la funcionalidad de System.Reflection y constituye el modo principal de obtener acceso a los metadatos. Hay que utilizar los miembros de Type para obtener información acerca de una declaración de tipos, como los constructores, métodos, campos, propiedades y eventos de una clase, así como el módulo y el ensamblado en los que se implementa la clase.

El operador typeof de C# (operador GetType en Visual Basic, operador typeid en Visual C++) devuelve un objeto Type.

Un objeto Type que representa un tipo es único; es decir, dos referencias al objeto Type hacen referencia al mismo objeto sólo si representan el mismo tipo. Esto permite comparar los objetos Type mediante la igualdad de referencia.

Sin la clase ReflectionPermission, el código sólo puede obtener acceso a los miembros públicos de los ensamblados cargados. Se incluye, entre otros, el acceso sin restricciones al método Object.GetType, el acceso a los tipos públicos exportados a través del método Type.GetType y el acceso al método GetTypeFromHandle. Algunas propiedades de Type, como FullName y Attributes, son accesibles sin la clase ReflectionPermission.

Type es una clase base abstracta que permite diversas implementaciones. El sistema siempre proporcionará el RuntimeType de la clase derivada. En la reflexión, todas las clases que comienzan por la palabra Runtime se crean sólo una vez por cada objeto del sistema y admiten operaciones de comparación.

42892f65.alert_note(es-es,VS.90).gifNota:

En escenarios de subprocesamiento múltiple, no bloquee objetos Type para sincronizar el acceso a datos static. Otro código, sobre el que no tiene control, también puede bloquear el tipo de clase. Esto puede originar un interbloqueo. En su lugar, sincronice el acceso a datos estáticos bloqueando un objeto static privado.

Esta clase es segura para la ejecución de subprocesos; varios subprocesos pueden leer simultáneamente de una instancia de este tipo. Una instancia de Type puede representar cualquiera de los siguientes tipos:

  • Clases

  • Tipos de valor

  • Matrices

  • Interfaces

  • Punteros

  • Enumeraciones

  • Tipos genéricos construidos y definiciones de tipo genérico

  • Argumentos y parámetros de tipos genéricos construidos, definiciones de tipo genérico y definiciones de método genérico

Se puede obtener una referencia al objeto Type asociado a un tipo de los modos siguientes:

  • El método Object.GetType devuelve un objeto Type que representa el tipo de una instancia.

  • Los métodos estáticos GetType devuelven un objeto Type que representa un tipo especificado mediante su nombre completo.

  • Los métodos Module.GetTypes, Module.GetType y Module.FindTypes devuelven objetos Type que representan los tipos definidos en un módulo. El primer método se puede utilizar para obtener una matriz de objetos Type de todos los tipos públicos y privados definidos en un módulo. Es posible obtener una instancia de Module a través de los métodos Assembly.GetModule o Assembly.GetModules, o a través de la propiedad Type.Module.

  • El método FindInterfaces devuelve una lista filtrada con los tipos de interfaz admitidos por un tipo.

  • El método GetElementType devuelve un objeto Type que representa el elemento.

  • Los métodos GetInterfaces y GetInterface devuelven objetos Type que representan los tipos de interfaz que admite un tipo.

  • El método GetTypeArray devuelve una matriz de objetos Type que representan los tipos especificados por un conjunto arbitrario de objetos. Los objetos se especifican con una matriz de tipo Object.

  • Los métodos GetTypeFromProgID y GetTypeFromCLSID se proporcionan para que exista interoperabilidad con COM. Devuelven un objeto Type que representa el tipo especificado por el identificador ProgID o CLSID.

  • El método GetTypeFromHandle se proporciona para que exista interoperabilidad. Devuelve un objeto Type que representa el tipo especificado por un identificador de clase.

  • Los operadores typeof de C#, typeid de C++ y GetType de Visual Basic obtienen el objeto Type para un tipo.

  • El método MakeGenericType devuelve un objeto Type que representa un tipo genérico construido, el cual es un tipo construido abierto si su propiedad ContainsGenericParameters devuelve true y un tipo construido cerrado en caso contrario. Sólo se pueden crear instancias de un tipo genérico si está cerrado.

  • Los métodos MakeArrayType, MakePointerType y MakeByRefType devuelven objetos Type que representan, respectivamente, una matriz de un tipo especificado, un puntero a un tipo especificado y el tipo de un parámetro de referencia (ref en C#, ByRef en Visual Basic).

42892f65.alert_note(es-es,VS.90).gifNota:

Una clase derivada puede obtener acceso a miembros protegidos de las clases base del código de llamada. Además, se permite el acceso a miembros del ensamblado de código de llamada. Como norma, si se ha permitido el acceso a un código enlazado en tiempo de compilación, también se permitirá el acceso a un código enlazado en tiempo de ejecución.

42892f65.alert_note(es-es,VS.90).gifNota:

Las interfaces que amplían otras interfaces no heredan los métodos definidos en las interfaces extendidas.

Notas para los herederos:

Al heredar de Type, es preciso reemplazar los siguientes miembros: GUID, InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]), Module, Assembly, TypeHandle, FullName, Namespace, AssemblyQualifiedName, BaseType, GetConstructorImpl, GetConstructors(BindingFlags), GetMethodImpl, GetMethods(BindingFlags), GetField(String, BindingFlags), GetFields(BindingFlags), GetInterface(String, Boolean), GetInterfaces(), GetEvent(String, BindingFlags), GetEvents(BindingFlags), GetPropertyImpl, GetProperties(BindingFlags), GetNestedType(String, BindingFlags), GetNestedTypes(BindingFlags), GetAttributeFlagsImpl, IsArrayImpl, IsByRefImpl, IsPointerImpl, IsPrimitiveImpl, IsCOMObjectImpl, GetElementType(), HasElementTypeImpl, UnderlyingSystemType, MemberInfo.Name, MemberInfo.IsDefined, MemberInfo.GetCustomAttributes(Boolean) y GetCustomAttributes.

En el ejemplo de código siguiente se muestran algunas características representativas de Type. El operador typeof de C# (operador GetType en Visual Basic, operador typeid en Visual C++) se utiliza para obtener un objeto Type que representa String. Desde este Type objeto, el método GetMethod se utiliza para obtener MethodInfo que representa la sobrecarga de Substring que toma una ubicación inicial y una longitud.

Para identificar la firma de la sobrecarga, en el ejemplo de código se crea una matriz temporal que contiene dos objetos Type que representan int (Integer en Visual Basic).

42892f65.alert_note(es-es,VS.90).gifNota:

Para ser precisos, la matriz contiene dos referencias a la instancia de Type que representa int en el dominio de aplicación actual. Para cualquier tipo, sólo hay una instancia de Type por dominio de aplicación.

En el ejemplo de código se utiliza MethodInfo para llamar al método Substring en la cadena "Hello, World!", y se muestra el resultado.

using System;
using System.Reflection;

class Example
{
    static void Main()
    {
        Type t = typeof(String);

        MethodInfo substr = t.GetMethod("Substring", 
            new Type[] { typeof(int), typeof(int) });

        Object result = 
            substr.Invoke("Hello, World!", new Object[] { 7, 5 });
        Console.WriteLine("{0} returned \"{1}\".", substr, result);
    }
}

/* This code example produces the following output:

System.String Substring(Int32, Int32) returned "World".
 */


Este tipo es seguro para la ejecución de subprocesos.

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile para Smartphone, Windows Mobile para Pocket PC, Xbox 360

.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

.NET Framework

Compatible con: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Compatible con: 3.5, 2.0, 1.0

XNA Framework

Compatible con: 2.0, 1.0

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft