Reflektion

Mithilfe der Klassen im System.Reflection-Namespace in Verbindung mit System.Type können Sie Informationen über geladene Assemblys und die darin definierten Typen, z. B. Klassen, Schnittstellen und Werttypen, erhalten. Sie können Reflektion verwenden, um Instanzen eines Typs zur Laufzeit zu erstellen, sie aufzurufen und auf sie zuzugreifen. Themen zu bestimmten Aspekten der Reflektion finden Sie unter Verwandten Themen am Ende dieser Übersicht.

Das Common Language Runtime-Ladeprogramm verwaltet Anwendungsdomänen, die festgelegte, definierte Begrenzungen um Objekte mit demselben Anwendungsbereich darstellen. Zu den Verwaltungsaufgaben gehören: Das Laden einer Assembly in die richtige Anwendungsdomäne sowie die Kontrolle über das Speicherlayout der Typenhierarchie innerhalb der einzelnen Assemblys.

Assemblys enthalten Module, Module enthalten Typen, Typen enthalten Member. Reflektion stellt Objekte zur Verfügung, die Assemblys, Module und Typen kapseln. Mithilfe von Reflektion lassen sich Instanzen von Typen dynamisch erzeugen, Typen an ein vorhandenes Objekt binden sowie Typinformationen über ein vorhandenes Objekt erhalten. Anschließend können Sie die Methoden eines Typs aufrufen oder auf dessen Felder und Eigenschaften zugreifen. Typische Anwendungsgebiete von Reflektion sind folgende:

  • Verwenden Sie Assembly zum Definieren und Laden von Assemblys, zum Laden von Modulen, die im Assemblymanifest aufgeführt sind, oder zum Suchen eines Typs dieser Assembly sowie zum Erstellen einer Instanz dieses Typs.

  • Verwenden Sie Module zum Ermitteln von Informationen wie z. B. der Assembly, die das Modul und die Klassen im Modul enthält. Sie können auch alle globalen oder bestimmte andere, nicht globale Methoden ermitteln, die im Modul definiert sind.

  • Mit ConstructorInfo erhalten Sie Informationen wie Name, Parameter, Zugangsmodifizierer (z. B. public oder private) und andere Implementierungsdetails (z. B. abstract oder virtual) eines Konstruktors. Mit der GetConstructors-Methode oder der GetConstructor-Methode eines Type können Sie spezielle Konstruktoren aufrufen.

  • Mit MethodInfo erhalten Sie Informationen wie Name, Rückgabetyp, Parameter, Zugangsmodifizierer (z. B. public oder private) und andere Implementierungsdetails (z. B. abstract oder virtual) einer Methode. Mit der GetMethods-Methode oder der GetMethod-Methode eines Type können Sie spezielle Methoden aufrufen.

  • Verwenden Sie FieldInfo zum Ermitteln von Informationen wie Name, Zugangsmodifizierer (z. B. public oder private) und anderen Implementierungsdetails (z. B. static) eines Felds und zum Abrufen oder Festlegen von Feldwerten.

  • Verwenden Sie EventInfo zum Ermitteln von Informationen wie Name, Datentyp von Ereignishandlern, benutzerdefinierte Attribute, Deklarationstyp oder reflektierter Typ eines Ereignisses. Darüber hinaus können Sie Ereignishandler hinzufügen oder entfernen.

  • Verwenden Sie PropertyInfo zum Ermitteln von Informationen wie Name, Datentyp, Deklarationstyp und reflektierter Typ oder Status einer Eigenschaft (schreibgeschützt oder veränderbar). Darüber hinaus können Sie Eigenschaftswerte abrufen oder festlegen.

  • Mit ParameterInfo können Sie Informationen über Parameternamen oder Datentypen erhalten und ermitteln, ob es sich um einen Ein- oder Ausgabeparameter handelt, sowie seine Position innerhalb einer Methodensignatur bestimmen.

  • Mit CustomAttributeData erhalten Sie Informationen zu benutzerdefinierten Attributen, wenn Sie im ReflectionOnly-Kontext einer Anwendungsdomäne arbeiten. Mit CustomAttributeData können Sie Attribute überprüfen, ohne Instanzen davon zu erstellen.

Die Klassen des System.Reflection.Emit-Namespace bieten eine spezielle Form von Reflektion, mit der Sie Typen zur Laufzeit erstellen können.

Reflektion dient auch zum Erstellen von Anwendungen (so genannten Typbrowsern), mit deren Hilfe Benutzer Typen auswählen und anschließend Informationen über sie anzeigen können.

Reflektion kann auch für weitere Zwecke eingesetzt werden. Compiler für Sprachen wie JScript verwenden Reflektion zum Erstellen von Symboltabellen. Die Klassen im System.Runtime.Serialization-Namespace setzen Reflektion ein, um auf Daten zuzugreifen und festzustellen, welche Felder beibehalten werden. Die Klassen im System.Runtime.Remoting-Namespace verwenden die Reflektion indirekt über die Serialisierung.

Verwandte Themen

Titel

Beschreibung

Laufzeittypen in Reflexion

Beschreibt die internen Typen wie RuntimeType, die die abstrakten Klassen im System.Reflection-Namespace erben und größtenteils die Implementierung bereitstellen.

Anzeigen von Typinformationen

Beschreibt die Type-Klasse und gibt Codebeispiele an, die veranschaulichen, wie Type in Verbindung mit verschiedenen Reflektionsklassen verwendet wird, um Informationen über Konstruktoren, Methoden, Felder, Eigenschaften und Ereignisse abzurufen.

Reflektion und generische Typen

Erläutert die Behandlung der Typparameter und Typargumente generischer Typen und Methoden durch die Reflektion.

Von Reflektionsklassen verwendete Entwurfsmuster

Stellt eine Tabelle zur Verfügung, in der das Benennungsmuster für Methoden sowie die Verwendung der gebräuchlichsten Reflektionsklassen wie Module, Type und MemberInfo beschrieben wird.

Sicherheitsüberlegungen für die Reflektion

Beschreibt die Regeln, die festlegen, in welchem Ausmaß Reflektion verwendet werden kann, um Informationen über Typen zu erhalten und auf Typen zuzugreifen.

Dynamisches Laden und Verwenden von Typen

Beschreibt die Reflektionsschnittstelle für benutzerdefinierte Bindung, die spätes Binden unterstützt.

Gewusst wie: Laden von Assemblys in den reflektionsbezogenen Kontext

Beschreibt den reflektionsbezogenen Load-Kontext. Veranschaulicht weiterhin das Laden einer Assembly, das Testen des Kontexts und das Untersuchen von Attributen, die im reflektionsbezogenen Kontext auf eine Assembly angewendet werden.

Zugreifen auf Standardelemente

Veranschaulicht die Verwendung von Reflektion zum Zugriff auf Standardmember, die in einer Klasse enthalten sind.

Zugreifen auf Standardargumentwerte

Veranschaulicht die Verwendung von Reflektion zum Zugriff auf Argumente mit Standardwerten. Weiterhin wird der Aufruf von Methoden beschrieben, die Argumente mit Standardwerten enthalten.

Zugreifen auf benutzerdefinierte Attribute

Veranschaulicht die Verwendung von Reflektion zur Abfrage, ob Attribute und deren Werte vorhanden sind.

Angeben vollständig gekennzeichneter Typnamen

Beschreibt das Format für vollständig gekennzeichnete Typnamen in BNF (Backus-Naur-Form) sowie die Syntax zur Angabe von Sonderzeichen, Assemblynamen, Zeigern, Verweisen und Arrays.

Nicht verwaltete Reflektions-API

Führt Informationsquellen zur Verwendung der nicht verwalteten Reflektion für die Untersuchung von Metadaten auf.

Gewusst wie: Verknüpfen mit einem Delegaten anhand von Reflektion

Erläutert die Erstellung eines Delegaten für eine Methode und das Verknüpfen des Delegaten mit einem Ereignis. Erklärt weiterhin das Erstellen wie eine Ereignisbehandlungsmethode zur Laufzeit mithilfe von DynamicMethod.

Ausgeben von dynamischen Methoden und Assemblys

Erläutert das Generieren dynamischer Assemblys und dynamischer Methoden.

Verweis

System.Type

System.Reflection

System.Reflection.Emit

Nach oben