Classe System.Reflection.Emit.MethodBuilder
Cet article vous offre des remarques complémentaires à la documentation de référence pour cette API.
La MethodBuilder classe est utilisée pour décrire entièrement une méthode dans le langage intermédiaire commun (CIL), y compris le nom, les attributs, la signature et le corps de la méthode. Il est utilisé conjointement avec la TypeBuilder classe pour créer des classes au moment de l’exécution.
Vous pouvez utiliser l’émission de réflexion pour définir des méthodes globales et définir des méthodes en tant que membres de type. Les API qui définissent des méthodes retournent MethodBuilder des objets.
Méthodes globales
Une méthode globale est définie à l’aide de la ModuleBuilder.DefineGlobalMethod méthode, qui retourne un MethodBuilder
objet.
Les méthodes globales doivent être statiques. Si un module dynamique contient des méthodes globales, la ModuleBuilder.CreateGlobalFunctions méthode doit être appelée avant de conserver le module dynamique ou l’assembly dynamique contenant, car le Common Language Runtime reporte la correction du module dynamique jusqu’à ce que toutes les fonctions globales aient été définies.
Une méthode native globale est définie à l’aide de la ModuleBuilder.DefinePInvokeMethod méthode. Les méthodes PInvoke (Platform Invoke) ne doivent pas être déclarées abstraites ou virtuelles. Le runtime définit l’attribut d’une MethodAttributes.PinvokeImpl méthode d’appel de plateforme.
Méthodes en tant que membres de types
Une méthode est définie en tant que membre de type à l’aide de la TypeBuilder.DefineMethod méthode, qui retourne un MethodBuilder objet.
La DefineParameter méthode est utilisée pour définir le nom et les attributs de paramètre d’un paramètre ou de la valeur de retour. L’objet ParameterBuilder retourné par cette méthode représente un paramètre ou la valeur de retour. L’objet ParameterBuilder peut être utilisé pour définir le marshaling, définir la valeur constante et appliquer des attributs personnalisés.
Attributs
Les membres de l’énumération MethodAttributes définissent le caractère précis d’une méthode dynamique :
- Les méthodes statiques sont spécifiées à l’aide de l’attribut MethodAttributes.Static .
- Les méthodes finales (méthodes qui ne peuvent pas être substituées) sont spécifiées à l’aide de l’attribut MethodAttributes.Final .
- Les méthodes virtuelles sont spécifiées à l’aide de l’attribut MethodAttributes.Virtual .
- Les méthodes abstraites sont spécifiées à l’aide de l’attribut MethodAttributes.Abstract .
- Plusieurs attributs déterminent la visibilité des méthodes. Consultez la description de l’énumération MethodAttributes .
- Les méthodes qui implémentent des opérateurs surchargés doivent définir l’attribut MethodAttributes.SpecialName .
- Les finaliseurs doivent définir l’attribut MethodAttributes.SpecialName .
Problèmes connus
- Bien qu’elle MethodBuilder soit dérivée MethodInfode , certaines des méthodes abstraites définies dans la MethodInfo classe ne sont pas entièrement implémentées dans MethodBuilder. Ces MethodBuilder méthodes lèvent le NotSupportedException. Par exemple, la MethodBuilder.Invoke méthode n’est pas entièrement implémentée. Vous pouvez réfléchir à ces méthodes en récupérant le type englobant à l’aide des méthodes ou Assembly.GetType des Type.GetType méthodes.
- Les modificateurs personnalisés sont pris en charge.