Übersicht über Reflektion

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 werden, oder zum Auffinden eines Typs dieser Assembly sowie zum Erzeugen einer Instanz dieses Typs.

  • Verwenden Sie Module zum Ermitteln von Informationen wie z. B. der Assembly, die das Modul oder die Klassen des Moduls 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 Namen, 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-Objekts können Sie einen bestimmten Konstruktor aufrufen.

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

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

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

  • Verwenden Sie PropertyInfo zum Ermitteln von Informationen wie Name, Datentyp, Deklarationstyp und reflektierter Typ oder Status (schreibgeschützt oder veränderbar) einer Eigenschaft. Darüber hinaus können Sie auch Eigenschaftenwerte 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 der 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 denen 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 Reflektion indirekt über die Serialisierung.

Siehe auch

Referenz

Reflection Namespace
System.Reflection.Emit

Weitere Ressourcen

Reflektion
Ausgeben von dynamischen Methoden und Assemblys