Clase System.Reflection.Emit.MethodBuilder
En este artículo se proporcionan comentarios adicionales a la documentación de referencia de esta API.
La MethodBuilder clase se usa para describir completamente un método en lenguaje intermedio común (CIL), incluidos el nombre, los atributos, la firma y el cuerpo del método. Se usa junto con la TypeBuilder clase para crear clases en tiempo de ejecución.
Puede usar la emisión de reflexión para definir métodos globales y definir métodos como miembros de tipo. Las API que definen los métodos devuelven MethodBuilder objetos.
Métodos globales
Un método global se define mediante el ModuleBuilder.DefineGlobalMethod método , que devuelve un MethodBuilder
objeto .
Los métodos globales deben ser estáticos. Si un módulo dinámico contiene métodos globales, ModuleBuilder.CreateGlobalFunctions se debe llamar al método antes de conservar el módulo dinámico o el ensamblado dinámico contenedor 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 ModuleBuilder.DefinePInvokeMethod método . Los métodos de invocación de plataforma (PInvoke) no deben declararse abstractos ni virtuales. El tiempo de ejecución establece el MethodAttributes.PinvokeImpl atributo para un método de invocación de plataforma.
Métodos como miembros de tipos
Un método se define como un miembro de tipo mediante el TypeBuilder.DefineMethod método , que devuelve un MethodBuilder objeto .
El DefineParameter método se usa para establecer los atributos name y parameter de un parámetro o del valor devuelto. El ParameterBuilder objeto devuelto por este método representa un parámetro o el valor devuelto. El ParameterBuilder objeto se puede usar para establecer la serialización, para establecer el valor constante y para aplicar atributos personalizados.
Atributos
Los miembros de la MethodAttributes enumeración definen el carácter preciso de un método dinámico:
- Los métodos estáticos se especifican mediante el MethodAttributes.Static atributo .
- Los métodos finales (métodos que no se pueden invalidar) se especifican mediante el MethodAttributes.Final atributo .
- Los métodos virtuales se especifican mediante el MethodAttributes.Virtual atributo .
- Los métodos abstractos se especifican mediante el MethodAttributes.Abstract atributo .
- Varios atributos determinan la visibilidad del método. Consulte la descripción de la MethodAttributes enumeración.
- Los métodos que implementan operadores sobrecargados deben establecer el MethodAttributes.SpecialName atributo .
- Los finalizadores deben establecer el MethodAttributes.SpecialName atributo .
Problemas conocidos
- Aunque MethodBuilder se deriva de MethodInfo, algunos de los métodos abstractos definidos en la MethodInfo clase no se implementan completamente en MethodBuilder. Estos MethodBuilder métodos inician .NotSupportedException Por ejemplo, el MethodBuilder.Invoke método no está totalmente implementado. Puede reflejar estos métodos recuperando el tipo envolvente mediante los Type.GetType métodos o Assembly.GetType .
- Se admiten modificadores personalizados.