Reflexión en .NET FrameworkReflection in the .NET Framework

Las clases del espacio de nombres System.Reflection, junto con System.Type, permiten obtener información sobre los ensamblados cargados y los tipos definidos dentro de ellos, como clases, interfaces y tipos de valor.The classes in the System.Reflection namespace, together with System.Type, enable you to obtain information about loaded assemblies and the types defined within them, such as classes, interfaces, and value types. También puede usar la reflexión para crear instancias de tipos en tiempo de ejecución, para llamarlas y para acceder a ellas.You can also use reflection to create type instances at run time, and to invoke and access them. Para consultar temas sobre aspectos específicos de la reflexión, vea los Temas relacionados al final de esta introducción.For topics about specific aspects of reflection, see Related Topics at the end of this overview.

El cargador de Common Language Runtime administra dominios de aplicación, que constituyen los límites definidos alrededor de los objetos que tienen el mismo ámbito de aplicación.The common language runtime loader manages application domains, which constitute defined boundaries around objects that have the same application scope. Esta administración incluye la carga de cada ensamblado en el dominio de aplicación apropiado y el control del diseño de memoria de la jerarquía de tipos de cada ensamblado.This management includes loading each assembly into the appropriate application domain and controlling the memory layout of the type hierarchy within each assembly.

Los ensamblados contienen módulos, los módulos contienen tipos y los tipos contienen miembros.Assemblies contain modules, modules contain types, and types contain members. La reflexión proporciona objetos que encapsulan ensamblados, módulos y tipos.Reflection provides objects that encapsulate assemblies, modules, and types. Puede usar la reflexión para crear dinámicamente una instancia de un tipo, enlazar el tipo a un objeto existente u obtener el tipo desde un objeto existente.You can use reflection to dynamically create an instance of a type, bind the type to an existing object, or get the type from an existing object. Después, puede invocar los métodos del tipo o acceder a sus campos y propiedades.You can then invoke the type's methods or access its fields and properties. Normalmente, la reflexión se usa para lo siguiente:Typical uses of reflection include the following:

  • Use Assembly para definir y cargar ensamblados, cargar módulos enumerados en el manifiesto del ensamblado y buscar un tipo en este ensamblado y crear una instancia a partir de él.Use Assembly to define and load assemblies, load modules that are listed in the assembly manifest, and locate a type from this assembly and create an instance of it.

  • Use Module para detectar información, como el ensamblado que contiene el módulo y las clases del módulo.Use Module to discover information such as the assembly that contains the module and the classes in the module. También puede obtener todos los métodos globales u otros métodos específicos no globales definidos en el módulo.You can also get all global methods or other specific, nonglobal methods defined on the module.

  • Use ConstructorInfo para detectar información, como el nombre, los parámetros, los modificadores de acceso (por ejemplo, public o private) y detalles de implementación (por ejemplo, abstract o virtual) de un constructor.Use ConstructorInfo to discover information such as the name, parameters, access modifiers (such as public or private), and implementation details (such as abstract or virtual) of a constructor. Use el método GetConstructors o GetConstructor de un Type para invocar un constructor específico.Use the GetConstructors or GetConstructor method of a Type to invoke a specific constructor.

  • Use MethodInfo para detectar información, como el nombre, el tipo de retorno, los parámetros, los modificadores de acceso (por ejemplo, public o private) y detalles de implementación (por ejemplo, abstract o virtual) de un método.Use MethodInfo to discover information such as the name, return type, parameters, access modifiers (such as public or private), and implementation details (such as abstract or virtual) of a method. Use el método GetMethods o GetMethod de un Type para invocar un método específico.Use the GetMethods or GetMethod method of a Type to invoke a specific method.

  • Use FieldInfo para detectar información como el nombre, los modificadores de acceso (por ejemplo, public o private) y detalles de la implementación (por ejemplo, static) de un campo, así como para obtener o establecer los valores del campo.Use FieldInfo to discover information such as the name, access modifiers (such as public or private) and implementation details (such as static) of a field, and to get or set field values.

  • Use 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, y para agregar o quitar controladores de eventos.Use EventInfo to discover information such as the name, event-handler data type, custom attributes, declaring type, and reflected type of an event, and to add or remove event handlers.

  • Use PropertyInfo para detectar información, como el nombre, el tipo de datos, la declaración de tipo, el tipo reflejado y el estado de solo lectura o de escritura de una propiedad, así como para obtener o establecer los valores de la propiedad.Use PropertyInfo to discover information such as the name, data type, declaring type, reflected type, and read-only or writable status of a property, and to get or set property values.

  • Use ParameterInfo para detectar información, como el nombre del parámetro, el tipo de datos, si un parámetro es de entrada o de salida, y la posición del parámetro en una firma de método.Use ParameterInfo to discover information such as a parameter's name, data type, whether a parameter is an input or output parameter, and the position of the parameter in a method signature.

  • Use CustomAttributeData para detectar información sobre atributos personalizados cuando se trabaja en el contexto de solo reflexión de un dominio de aplicación.Use CustomAttributeData to discover information about custom attributes when you are working in the reflection-only context of an application domain. CustomAttributeData permite examinar los atributos sin crear instancias de ellos.CustomAttributeData allows you to examine attributes without creating instances of them.

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.The classes of the System.Reflection.Emit namespace provide a specialized form of reflection that enables you to build types at run time.

La reflexión también se puede usar para crear aplicaciones llamadas exploradores de tipos, que permiten a los usuarios seleccionar tipos y, después, ver la información sobre esos tipos.Reflection can also be used to create applications called type browsers, which enable users to select types and then view the information about those types.

La reflexión tiene otros usos.There are other uses for reflection. Los compiladores de lenguajes como JScript usan la reflexión para generar tablas de símbolos.Compilers for languages such as JScript use reflection to construct symbol tables. Las clases del espacio de nombres System.Runtime.Serialization usan la reflexión para acceder a los datos y para determinar los campos que se deben conservar.The classes in the System.Runtime.Serialization namespace use reflection to access data and to determine which fields to persist. Las clases del espacio de nombres System.Runtime.Remoting usan la reflexión indirectamente a través de la serialización.The classes in the System.Runtime.Remoting namespace use reflection indirectly through serialization.

Tipos de reflexión en tiempo de ejecuciónRuntime Types in Reflection

La reflexión proporciona clases, como Type y MethodInfo, para representar tipos, miembros, parámetros y otras entidades de código.Reflection provides classes, such as Type and MethodInfo, to represent types, members, parameters, and other code entities. Sin embargo, cuando se usa la reflexión no se trabaja directamente con estas clases, la mayoría de las cuales es abstracta (MustInherit en Visual Basic).However, when you use reflection you don't work directly with these classes, most of which are abstract (MustInherit in Visual Basic). En su lugar, se trabaja con tipos proporcionados por Common Language Runtime (CLR).Instead, you work with types provided by the common language runtime (CLR).

Por ejemplo, cuando se usa el operador de C# typeof (GetType en Visual Basic) para obtener un objeto Type, el objeto es en realidad un RuntimeType.For example, when you use the C# typeof operator (GetType in Visual Basic) to obtain a Type object, the object is really a RuntimeType. RuntimeType deriva de Type y proporciona implementaciones de todos los métodos abstractos.RuntimeType derives from Type, and provides implementations of all the abstract methods.

Estas clases en tiempo de ejecución son internal (Friend en Visual Basic).These runtime classes are internal (Friend in Visual Basic). No se documentan por separado de sus clases base, ya que su comportamiento se describe en la documentación de la clase base.They are not documented separately from their base classes, because their behavior is described by the base class documentation.

TitleTitle DescripciónDescription
Viewing Type Information (Ver información tipos)Viewing Type Information Describe la clase Type y proporciona ejemplos de código que muestran cómo usar Type con diversas clases de reflexión para obtener información sobre constructores, métodos, campos, propiedades y eventos.Describes the Type class and provides code examples that illustrate how to use Type with several reflection classes to obtain information about constructors, methods, fields, properties, and events.
Reflection and Generic Types (Reflexión y tipos genéricos)Reflection and Generic Types Explica cómo la reflexión controla los parámetros de tipo y los argumentos de tipo de tipos genéricos y métodos genéricos.Explains how reflection handles the type parameters and type arguments of generic types and generic methods.
Consideraciones de seguridad sobre la reflexiónSecurity Considerations for Reflection Describe las reglas que determinan hasta qué punto se puede usar la reflexión para detectar la información sobre tipos y acceder a los tipos.Describes the rules that determine to what degree reflection can be used to discover type information and access types.
Cargar y usar tipos dinámicamenteDynamically Loading and Using Types Describe la interfaz de enlace personalizado de reflexión que admite enlace de tiempo de ejecución.Describes the reflection custom-binding interface that supports late binding.
Cómo: Cargar ensamblados en el contexto de solo reflexiónHow to: Load Assemblies into the Reflection-Only Context Describe el contexto de carga de solo reflexión.Describes the reflection-only load context. 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 solo reflexión.Shows how to load an assembly, how to test the context, and how to examine attributes applied to an assembly in the reflection-only context.
Acceso a atributos personalizadosAccessing Custom Attributes Muestra cómo usar la reflexión para consultar la existencia de atributos y sus valores.Demonstrates using reflection to query attribute existence and values.
Especificar nombres de tipo completosSpecifying Fully Qualified Type Names Describe el formato de 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.Describes the format of fully qualified type names in terms of the Backus-Naur form (BNF), and the syntax required for specifying special characters, assembly names, pointers, references, and arrays.
Cómo: Enlazar un delegado mediante la reflexiónHow to: Hook Up a Delegate Using Reflection Explica cómo crear un delegado para un método y enlazar el delegado a un evento.Explains how to create a delegate for a method and hook the delegate up to an event. Explica cómo crear un método de control de eventos en tiempo de ejecución mediante DynamicMethod.Explains how to create an event-handling method at run time using DynamicMethod.
Emitir métodos y ensamblados dinámicosEmitting Dynamic Methods and Assemblies Explica cómo generar ensamblados y métodos dinámicos.Explains how to generate dynamic assemblies and dynamic methods.

ReferenciaReference

System.Type

System.Reflection

System.Reflection.Emit