Información general sobre la reflexión

El cargador de Common Language Runtime administra dominios de aplicación, que definen los límites 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:

  • Se utiliza Assembly para definir y cargar ensamblados, cargar módulos que se enumeran en el manifiesto del ensamblado, buscar un tipo de este ensamblado y crear una instancia del mismo.

  • Se utiliza Module para descubrir información como el ensamblado que contiene el módulo y las clases en el 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.

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

  • Se utiliza MethodInfo para descubrir información como el nombre, los parámetros, los modificadores de acceso (como public o private) y los detalles de implementación (como abstract o virtual) de un método. Se utiliza el método GetMethods o GetMethod de un Type para invocar a un método específico.

  • Se utiliza FieldInfo para descubrir información como el nombre, los modificadores de acceso (como public o private) y los detalles de implementación (como static) de un campo y para obtener o establecer valores de campo.

  • Se utiliza EventInfo para descubrir información como el nombre, el tipo de datos del controlador de eventos, los atributos personalizados, el tipo que declara y el tipo reflejado de un evento, así como para agregar o quitar controladores de eventos.

  • Se utiliza PropertyInfo para descubrir información como el nombre, el tipo de datos, el tipo que declara, el tipo reflejado y el estado de sólo lectura o de escritura de una propiedad, así como para obtener o establecer valores de propiedad.

  • Se utiliza ParameterInfo para descubrir 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 un prototipo de método.

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

Las clases del espacio de nombres System.Reflection.Emit proporcionan una forma especializada de reflexión que permite generar 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.

Vea también

Referencia

Reflection Namespace
System.Reflection.Emit

Otros recursos

Reflexión
Emitir métodos y ensamblados dinámicos