Definieren einer Methode mittels Reflektionsausgabe

Aktualisiert: November 2007

In diesem Abschnitt wird beschrieben, wie die Reflektionsausgabe eingesetzt wird, um globale Methoden und Methoden als Typmember zu definieren. Die APIs, die Methoden definieren, geben MethodBuilder-Objekte zurück.

Die MethodBuilder.AddDeclarativeSecurity-Methode fügt einer Methode bei der Erstellung deklarative Sicherheit hinzu. AddDeclarativeSecurity kann mehrmals aufgerufen werden, wobei jeder Aufruf eine Sicherheitsaktion (z. B. Demand, Assert oder Deny) und eine Gruppe von Berechtigungen angibt, die die Aktion betreffen.

Eine globale Methode wird mithilfe der ModuleBuilder.DefineGlobalMethod-Methode definiert. DefineGlobalMethod gibt einen MethodBuilder zurück.

Globale Methoden müssen statisch sein. Falls ein dynamisches Modul globale Methoden enthält, muss die ModuleBuilder.CreateGlobalFunctions-Methode vor dem Speichern des dauerhaften Moduls bzw. der enthaltenen dynamischen Assembly aufgerufen werden, da die Common Language Runtime das Aufbereiten des dynamischen Moduls verzögert, bis alle globalen Funktionen definiert wurden.

Eine globale systemeigene Methode wird mithilfe der ModuleBuilder.DefinePInvokeMethod-Methode definiert. Plattformaufrufmethoden (PInvoke) müssen nicht als abstrakt oder virtuell deklariert werden. Die Common Language Runtime legt das MethodAttributes.PInvokeImpl-Attribut für eine Plattformaufrufmethode fest.

Eine Methode wird mithilfe der TypeBuilder.DefineMethod-Methode als Typmember definiert. DefineMethod gibt einen MethodBuilder zurück.

Mit der DefineParameter-Methode können Sie die Namens- und Parameterattribute eines Parameters oder des Rückgabewerts festlegen. Das von dieser Methode zurückgegebene ParameterBuilder-Objekt stellt einen Parameter oder den Rückgabewert dar. Mit dem ParameterBuilder-Objekt können Sie das Marshalling und den konstanten Wert festlegen sowie benutzerdefinierte Attribute anwenden.

Hinweis:

In .NET Framework, Versionen 1.0 und 1.1, kann die DefineParameter-Methode nicht auf den Rückgabewert angewendet werden.

Attribute

  • Statische Methoden werden durch das MethodAttributes.Static-Attribut angegeben.

  • Endgültige Methoden (Methoden, die nicht überschrieben werden können) werden mithilfe des MethodAttributes.Final-Attributs angegeben.

  • Virtuelle Methoden werden durch das MethodAttributes.Virtual-Attribut angegeben.

  • Abstrakte Methoden werden durch das MethodAttributes.Abstract-Attribut angegeben.

  • Verschiedene Attribute legen die Methodensichtbarkeit fest. Siehe dazu die Beschreibung der MethodAttributes-Enumeration.

  • Methoden, die überladene Operatoren implementieren, müssen das MethodAttributes.SpecialName-Attribut setzen.

  • Finalizer müssen das MethodAttributes.SpecialName-Attribut setzen.

Bekannte Probleme

  • Obwohl MethodBuilder von MethodInfo abgeleitet ist, sind einige der in der MethodInfo-Klasse definierten abstrakten Methoden nicht vollständig in MethodBuilder implementiert. Diese MethodBuilder-Methoden lösen die NotSupportedException aus. Beispielsweise ist die MethodBuilder.Invoke-Methode nicht vollständig implementiert. Sie können diese Methoden reflektieren, indem Sie den einschließenden Typ mithilfe von Type.GetType oder Assembly.GetType abrufen.

  • Benutzerdefinierte Modifizierer werden in .NET Framework, Version 2.0, unterstützt. Sie werden nicht in früheren Versionen unterstützt.

Siehe auch

Weitere Ressourcen

Verwenden der Reflektionsausgabe