Klasse System.Reflection.Emit.MethodBuilder
In dit artikel vindt u aanvullende opmerkingen in de referentiedocumentatie voor deze API.
De MethodBuilder klasse wordt gebruikt om een methode volledig te beschrijven in algemene tussenliggende taal (CIL), inclusief de naam, kenmerken, handtekening en de hoofdtekst van de methode. Deze wordt gebruikt in combinatie met de TypeBuilder klasse om tijdens runtime klassen te maken.
U kunt reflectie verzenden gebruiken om globale methoden te definiëren en methoden te definiëren als typeleden. De API's waarmee methoden worden gedefinieerd, retourneren MethodBuilder objecten.
Globale methoden
Een globale methode wordt gedefinieerd met behulp van de ModuleBuilder.DefineGlobalMethod methode, die een MethodBuilder
object retourneert.
Globale methoden moeten statisch zijn. Als een dynamische module globale methoden bevat, moet de ModuleBuilder.CreateGlobalFunctions methode worden aangeroepen voordat de dynamische module of de bijbehorende dynamische assembly wordt behouden, omdat de algemene taalruntime het oplossen van de dynamische module uitstelt totdat alle globale functies zijn gedefinieerd.
Een globale systeemeigen methode wordt gedefinieerd met behulp van de ModuleBuilder.DefinePInvokeMethod methode. Platform-aanroepen (PInvoke)-methoden mogen niet worden gedeclareerd als abstract of virtueel. De runtime stelt het MethodAttributes.PinvokeImpl kenmerk voor een platform-aanroepmethode in.
Methoden als leden van typen
Een methode wordt gedefinieerd als een typelid met behulp van de TypeBuilder.DefineMethod methode, die een MethodBuilder object retourneert.
De DefineParameter methode wordt gebruikt om de naam en parameterkenmerken van een parameter of van de retourwaarde in te stellen. Het ParameterBuilder object dat door deze methode wordt geretourneerd, vertegenwoordigt een parameter of de retourwaarde. Het ParameterBuilder object kan worden gebruikt om de marshaling in te stellen, de constante waarde in te stellen en aangepaste kenmerken toe te passen.
Kenmerken
Leden van de MethodAttributes opsomming definiëren het precieze karakter van een dynamische methode:
- Statische methoden worden opgegeven met behulp van het MethodAttributes.Static kenmerk.
- Definitieve methoden (methoden die niet kunnen worden overschreven) worden opgegeven met behulp van het MethodAttributes.Final kenmerk.
- Virtuele methoden worden opgegeven met behulp van het MethodAttributes.Virtual kenmerk.
- Abstracte methoden worden opgegeven met behulp van het MethodAttributes.Abstract kenmerk.
- Verschillende kenmerken bepalen de zichtbaarheid van methoden. Zie de beschrijving van de MethodAttributes opsomming.
- Methoden voor het implementeren van overbelaste operators moeten het MethodAttributes.SpecialName kenmerk instellen.
- Finalizers moeten het MethodAttributes.SpecialName kenmerk instellen.
Bekende problemen
- Hoewel MethodBuilder deze is afgeleid van MethodInfo, worden sommige abstracte methoden die in de MethodInfo klasse zijn gedefinieerd, niet volledig geïmplementeerd in MethodBuilder. Deze MethodBuilder methoden gooien de NotSupportedException. De methode is bijvoorbeeld MethodBuilder.Invoke niet volledig geïmplementeerd. U kunt over deze methoden nadenken door het insluittype op te halen met behulp van de Type.GetType of Assembly.GetType methoden.
- Aangepaste modifiers worden ondersteund.