Reflexión

Las clases del espacio de nombres System.Reflection, junto con System.Type, permiten obtener información acerca de los ensamblados cargados y los tipos definidos en los mismos, como clases, interfaces y tipos de valor. También se puede utilizar la reflexión para crear instancias de tipo en tiempo de ejecución, así como para invocarlas y obtener acceso a las mismas. Para obtener temas sobre aspectos concretos de la reflexión, vea Temas relacionados al final de esta información general.

El cargador de Common Language Runtime administra dominios de aplicación, que constituyen límites definidos de los objetos que tienen el mismo ámbito de aplicación. Dicha administración incluye la carga de cada ensamblado en el dominio de aplicación apropiado y el control del diseño de memoria correspondiente a la jerarquía de tipos de cada ensamblado.

Los ensamblados contienen módulos, los módulos contienen tipos y éstos últimos contienen miembros. La reflexión proporciona objetos que encapsulan ensamblados, módulos y tipos. Se puede utilizar la reflexión para crear dinámicamente una instancia de un tipo, enlazar el tipo a un objeto existente u obtener el tipo a partir de un objeto existente. A continuación, se puede invocar a los métodos del tipo u obtener acceso a los campos y propiedades correspondientes. Normalmente, se usa la reflexión en los siguientes casos:

  • Utilice Assembly para definir y cargar ensamblados, cargar los módulos que aparecen en el manifiesto del ensamblado, buscar un tipo a partir de este ensamblado y crear una instancia del mismo.

  • Utilice Module para detectar información, como el ensamblado que contiene el módulo y las clases del módulo. También se pueden obtener todos los métodos globales u otros métodos específicos no globales que se definen en el módulo.

  • Utilice ConstructorInfo para detectar información, como el nombre, los parámetros, los modificadores de acceso (por ejemplo, public o private) y los detalles de implementación (por ejemplo, abstract o virtual) de un constructor. Utilice el método GetConstructors o GetConstructor de un objeto Type para invocar un constructor específico.

  • Utilice MethodInfo para detectar información, como el nombre, el tipo devuelto, los parámetros, los modificadores de acceso (por ejemplo, public o private) y los detalles de implementación (por ejemplo, abstract o virtual) de un método. Utilice el método GetMethods o GetMethod de un objeto Type para invocar un método específico.

  • Utilice FieldInfo para detectar información, como el nombre, los modificadores de acceso (por ejemplo, public o private) y los detalles de implementación (por ejemplo, static) de un campo, así como para obtener o establecer los valores del campo.

  • Utilice EventInfo para detectar información, como el nombre, el tipo de datos del controlador de eventos, los atributos personalizados, el tipo declarativo y el tipo reflejado de un evento, así como para agregar o quitar controladores de eventos.

  • Utilice PropertyInfo para detectar información, como el nombre, el tipo de datos, el tipo declarativo, el tipo reflejado y el estado de sólo lectura o de escritura de una propiedad, así como para obtener o establecer los valores de la propiedad.

  • Utilice ParameterInfo para detectar información, como el nombre de un parámetro, el tipo de datos, si un parámetro es un parámetro de entrada o salida, así como la posición del parámetro en una firma del método.

  • Utilice CustomAttributeData para detectar información sobre atributos personalizados cuando se trabaja en el contexto de solo reflexión del dominio de aplicación. CustomAttributeData permite examinar los atributos sin crear instancias de ellos.

Las clases del espacio de nombres System.Reflection.Emit proporcionan una forma especializada de reflexión que permite compilar tipos en tiempo de ejecución.

La reflexión puede utilizarse asimismo para crear aplicaciones denominadas exploradores de tipos, que permiten a los usuarios seleccionar tipos y, a continuación, ver la información correspondiente.

La reflexión tiene también otras aplicaciones. Los compiladores de lenguajes como JScript utilizan la reflexión para generar tablas de símbolos. Las clases del espacio de nombres System.Runtime.Serialization utilizan la reflexión para obtener acceso a los datos y determinar los campos que se van a mantener. Las clases del espacio de nombres System.Runtime.Remoting utilizan la reflexión indirectamente a través de la serialización.

Temas relacionados

Título

Descripción

Tipos de reflexión en tiempo de ejecución

Describe los tipos internos, como RuntimeType, que heredan las clases abstractas del espacio de nombres System.Reflection y proporcionan gran parte de su implementación.

Ver información de tipos

Describe la clase Type y proporciona ejemplos de código que muestran cómo utilizar Type con diversas clases de reflexión para obtener información sobre constructores, métodos, campos, propiedades y eventos.

Reflexión y tipos genéricos

Explica cómo controla la reflexión los parámetros y argumentos de tipo de los tipos y métodos genéricos.

Modelos de diseño utilizados por las clases de reflexión

Proporciona una tabla que muestra el modelo de nomenclatura de métodos así como el uso de las clases de reflexión más frecuentes, como las clases Module, Type y MemberInfo.

Consideraciones de seguridad sobre la reflexión

Describe las reglas que determinan hasta qué punto se puede utilizar la reflexión para detectar información de tipo y los tipos de acceso.

Cargar y utilizar tipos dinámicamente

Describe la interfaz de enlace personalizada de reflexión que admite los enlaces en tiempo de ejecución.

Cómo: Cargar ensamblados en el contexto de sólo reflexión

Describe el contexto de carga de sólo reflexión. Muestra cómo cargar un ensamblado, cómo probar el contexto y cómo examinar los atributos aplicados a un ensamblado en el contexto de sólo reflexión.

Acceso a miembros predeterminados

Muestra cómo utilizar la reflexión para obtener acceso a los miembros predeterminados que pueda tener una clase.

Acceso a valores de argumento predeterminados

Muestra cómo utilizar la reflexión para obtener acceso a los argumentos con valores predeterminados y cómo invocar los métodos que tienen argumentos con valores predeterminados.

Acceso a atributos personalizados

Muestra cómo utilizar la reflexión para consultar la existencia y los valores de los atributos.

Especificar nombres de tipo completos

Describe el formato de los nombres de tipo completos en términos del formulario Backus-Naur (BNF) así como la sintaxis necesaria para especificar caracteres especiales, nombres de ensamblados, punteros, referencias y matrices.

API de reflexión no administrada

Explica dónde encontrar información sobre cómo utilizar la reflexión no administrada para examinar los metadatos.

Cómo: Enlazar un delegado mediante la reflexión

Explica cómo crear un delegado para un método y enlazar el delegado a un evento. Describe cómo crear un método de control de eventos en tiempo de ejecución mediante el método DynamicMethod.

Emitir métodos y ensamblados dinámicos

Explica cómo generar ensamblados y métodos dinámicos.

Referencia

System.Type

System.Reflection

System.Reflection.Emit

Volver al principio