System.Reflection.Emit.MethodBuilder-Klasse
Dieser Artikel enthält ergänzende Hinweise zur Referenzdokumentation für diese API.
Die MethodBuilder Klasse wird verwendet, um eine Methode in allgemeiner Zwischensprache (CIL) vollständig zu beschreiben, einschließlich Name, Attribute, Signatur und Methodentext. Sie wird in Verbindung mit der TypeBuilder Klasse verwendet, um Klassen zur Laufzeit zu erstellen.
Mithilfe von Reflection Emit können Sie globale Methoden definieren und Methoden als Typmmber definieren. Die APIs, die Methoden definieren, geben Objekte zurück MethodBuilder .
Globale Methoden
Eine globale Methode wird mithilfe der ModuleBuilder.DefineGlobalMethod Methode definiert, die ein MethodBuilder
Objekt zurückgibt.
Globale Methoden müssen statisch sein. Wenn ein dynamisches Modul globale Methoden enthält, muss die ModuleBuilder.CreateGlobalFunctions Methode aufgerufen werden, bevor das dynamische Modul oder die enthaltende dynamische Assembly beibehalten wird, da die Common Language Runtime das Beheben des dynamischen Moduls verzögert, bis alle globalen Funktionen definiert wurden.
Eine globale systemeigene Methode wird mithilfe der ModuleBuilder.DefinePInvokeMethod Methode definiert. Plattformaufrufmethoden (PInvoke) dürfen nicht abstrakt oder virtuell deklariert werden. Die Laufzeit legt das MethodAttributes.PinvokeImpl Attribut für eine Plattformaufrufmethode fest.
Methoden als Elemente von Typen
Eine Methode wird mithilfe der TypeBuilder.DefineMethod Methode, die ein MethodBuilder Objekt zurückgibt, als Typmemm definiert.
Die DefineParameter Methode wird verwendet, um den Namen und die Parameterattribute eines Parameters oder des Rückgabewerts festzulegen. Das ParameterBuilder von dieser Methode zurückgegebene Objekt stellt einen Parameter oder den Rückgabewert dar. Das ParameterBuilder Objekt kann verwendet werden, um das Marshalling festzulegen, den Konstantenwert festzulegen und benutzerdefinierte Attribute anzuwenden.
Attribute
Elemente der MethodAttributes Enumeration definieren das genaue Zeichen einer dynamischen Methode:
- Statische Methoden werden mithilfe des MethodAttributes.Static Attributs angegeben.
- Endgültige Methoden (Methoden, die nicht außer Kraft gesetzt werden können) werden mithilfe des MethodAttributes.Final Attributs angegeben.
- Virtuelle Methoden werden mithilfe des MethodAttributes.Virtual Attributs angegeben.
- Abstrakte Methoden werden mithilfe des MethodAttributes.Abstract Attributs angegeben.
- Mehrere Attribute bestimmen die Methodensichtbarkeit. Weitere Informationen finden Sie in der Beschreibung der MethodAttributes Enumeration.
- Methoden, die überladene Operatoren implementieren, müssen das MethodAttributes.SpecialName Attribut festlegen.
- Finalizer müssen das MethodAttributes.SpecialName Attribut festlegen.
Bekannte Probleme
- Obwohl MethodBuilder abgeleitet wird MethodInfo, werden einige der in der MethodInfo Klasse definierten abstrakten Methoden nicht vollständig implementiert MethodBuilder. Diese MethodBuilder Methoden lösen die NotSupportedException. Die Methode ist beispielsweise MethodBuilder.Invoke nicht vollständig implementiert. Sie können diese Methoden berücksichtigen, indem Sie den eingeschlossenen Typ mithilfe der Type.GetType methoden abrufen Assembly.GetType .
- Benutzerdefinierte Modifizierer werden unterstützt.