(0) exportieren Drucken
Alle erweitern

Übersicht über Reflektion

Aktualisiert: November 2007

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 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 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.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft