Definir un método con la emisión de la reflexión

En esta sección se describe cómo utilizar la emisión de la reflexión para definir métodos globales y para definir métodos como miembros de tipos. Las API que definen métodos devuelven objetos MethodBuilder.

El método MethodBuilder.AddDeclarativeSecurity agrega seguridad declarativa a un método que se esté compilando. Se puede llamar varias veces a AddDeclarativeSecurity, especificando en cada llamada una acción de seguridad (como Demand, Assert, Deny) y un conjunto de permisos a los que se aplica la acción.

Un método global se define mediante el método ModuleBuilder.DefineGlobalMethod. DefineGlobalMethod devuelve un objeto MethodBuilder.

Los métodos globales deben ser estáticos. Si un módulo dinámico contiene métodos globales, es necesario llamar al método ModuleBuilder.CreateGlobalFunctions antes de guardar el módulo dinámico o el ensamblado dinámico que lo contiene, porque Common Language Runtime pospone la corrección del módulo dinámico hasta que se hayan definido todas las funciones globales.

Un método nativo global se define mediante el método ModuleBuilder.DefinePInvokeMethod. Los métodos de invocación de plataforma (PInvoke) no se pueden declarar como abstractos ni virtuales. El motor en tiempo de ejecución establece el atributo MethodAttributes.PInvokeImpl para un método de invocación de plataforma.

Un método se define como un miembro de tipo mediante el método TypeBuilder.DefineMethod. DefineMethod devuelve un objeto MethodBuilder.

El método DefineParameter se utiliza para establecer los atributos de parámetro y nombre de un parámetro o del valor devuelto. El objeto ParameterBuilder devuelto por este método representa un parámetro o el valor devuelto. El objeto ParameterBuilder se puede utilizar para establecer el cálculo de referencias, establecer el valor constante, y aplicar atributos personalizados.

NotaNota

En las versiones 1.0 y 1.1 de .NET Framework, no se puede utilizar el método DefineParameter en el valor devuelto.

Atributos

  • Los métodos estáticos se especifican mediante el atributo MethodAttributes.Static.

  • Los métodos finales (métodos que no se pueden reemplazar) se especifican mediante el atributo MethodAttributes.Final.

  • Los métodos virtuales se especifican mediante el atributo MethodAttributes.Virtual.

  • Los métodos abstractos se especifican mediante el atributo MethodAttributes.Abstract.

  • Varios atributos determinan la visibilidad del método. Vea la descripción de la enumeración MethodAttributes.

  • Los métodos que implementan operadores sobrecargados deben establecer el atributo MethodAttributes.SpecialName.

  • Los finalizadores deben establecer el atributo MethodAttributes.SpecialName.

Problemas conocidos

  • Aunque MethodBuilder se deriva de MethodInfo, algunos de los métodos abstractos definidos en la clase MethodInfo no están del todo implementados en MethodBuilder. Estos métodos MethodBuilder producen la excepción NotSupportedException. Por ejemplo, el método MethodBuilder.Invoke no está totalmente implementado. Para obtener una reflexión en estos métodos, puede recuperar el tipo envolvente mediante Type.GetType o Assembly.GetType.

  • En la versión 2.0 de .NET Framework, se admiten modificadores personalizados. No se admiten en versiones anteriores.

Vea también

Otros recursos

Utilizar la emisión de la reflexión