Reflektion in .NET FrameworkReflection in the .NET Framework

Die Klassen im System.Reflection-Namespace ermöglichen Ihnen zusammen mit System.Type, Informationen zu geladenen Assemblys und den hierin definierten Typen wie Klassen, Schnittstellen und Werttypen abzurufen.The classes in the System.Reflection namespace, together with System.Type, enable you to obtain information about loaded assemblies and the types defined within them, such as classes, interfaces, and value types. Sie können auch mithilfe von Reflektion Typeninstanzen zur Laufzeit erstellen, diese aufrufen und darauf zugreifen.You can also use reflection to create type instances at run time, and to invoke and access them. Themen zu bestimmten Aspekten der Reflektion finden Sie unter Verwandte Themen am Ende dieser Übersicht.For topics about specific aspects of reflection, see Related Topics at the end of this overview.

Das Common Language Runtime-Ladeprogramm verwaltet Anwendungsdomänen, bei denen es sich um definierte Begrenzungen um Objekte im gleichen Anwendungsbereich handelt.The common language runtime loader manages application domains, which constitute defined boundaries around objects that have the same application scope. Diese Verwaltung umfasst das Laden jeder Assembly in die geeignete Anwendungsdomäne und das Steuern des Speicherlayouts der Typenhierarchie in jeder Assembly.This management includes loading each assembly into the appropriate application domain and controlling the memory layout of the type hierarchy within each assembly.

Assemblys enthalten Module, Module enthalten Typen, und Typen enthalten Member.Assemblies contain modules, modules contain types, and types contain members. Mit der Reflektion werden Objekte bereitgestellt, die Assemblys, Module und Typen kapseln.Reflection provides objects that encapsulate assemblies, modules, and types. Sie können mithilfe von Reflektion dynamisch eine Instanz eines Typen erzeugen, Typen an ein vorhandenes Objekt binden und Typinformationen eines vorhandenen Objekts abfragen.You can use reflection to dynamically create an instance of a type, bind the type to an existing object, or get the type from an existing object. Sie können anschließend die Methoden des Typs aufrufen oder auf dessen Felder oder Eigenschaften zugreifen.You can then invoke the type's methods or access its fields and properties. Typische Verwendungen von Reflektionen umfassen die folgenden:Typical uses of reflection include the following:

  • Verwenden Sie Assembly, um Assemblys zu definieren und zu laden, um Module zu laden, die im Assemblymanifest aufgeführt sind, und um einen Typ in seiner Assembly zu suchen und eine Instanz hiervon zu erstellen.Use Assembly to define and load assemblies, load modules that are listed in the assembly manifest, and locate a type from this assembly and create an instance of it.

  • Verwenden Sie Module, um Informationen zu ermitteln, wie die Assembly, die das Modul enthält, und die Klassen im Modul.Use Module to discover information such as the assembly that contains the module and the classes in the module. Sie können auch alle globalen Methoden oder andere spezifische, nicht globale Methoden abrufen, die im Modul definiert sind.You can also get all global methods or other specific, nonglobal methods defined on the module.

  • Verwenden Sie ConstructorInfo, um Informationen wie den Namen, die Parameter, die Zugriffsmodifizierer (wie public oder private) und Details zur Implementierung (wie abstract oder virtual) für einen Konstruktor abzurufen.Use ConstructorInfo to discover information such as the name, parameters, access modifiers (such as public or private), and implementation details (such as abstract or virtual) of a constructor. Verwenden Sie die GetConstructors- oder die GetConstructor-Methode eines Type, um einen bestimmten Konstruktor aufzurufen.Use the GetConstructors or GetConstructor method of a Type to invoke a specific constructor.

  • Verwenden Sie MethodInfo, um Informationen wie den Namen, den Rückgabetyp, die Parameter, die Zugriffsmodifizierer (wie public oder private) und Details zur Implementierung (wie abstract oder virtual) für eine Methode abzurufen.Use MethodInfo to discover information such as the name, return type, parameters, access modifiers (such as public or private), and implementation details (such as abstract or virtual) of a method. Verwenden Sie die GetMethods- oder die GetMethod-Methode eines Type, um eine bestimmte Methode aufzurufen.Use the GetMethods or GetMethod method of a Type to invoke a specific method.

  • Verwenden Sie FieldInfo, um Informationen wie den Namen, die Zugriffsmodifizierer (wie public oder private) und Details zur Implementierung (wie static) für ein Feld abzurufen oder die Feldwerte abzurufen oder festzulegen.Use FieldInfo to discover information such as the name, access modifiers (such as public or private) and implementation details (such as static) of a field, and to get or set field values.

  • Verwenden Sie EventInfo, um Informationen wie den Namen, den Datentyp das Ereignishandlers, benutzerdefinierte Attribute, den Deklarationstyp und den reflektierten Typ eines Ereignisses abzurufen und um Ereignishandler hinzuzufügen oder zu entfernen.Use EventInfo to discover information such as the name, event-handler data type, custom attributes, declaring type, and reflected type of an event, and to add or remove event handlers.

  • Verwenden Sie PropertyInfo, um Informationen wie den Namen, den Datentyp, den Deklarationstyp, den reflektierten Typ und die Status "Schreibgeschützt" oder "Beschreibbar" einer Eigenschaft abzurufen und um die Eigenschaftswert abzurufen oder festzulegen.Use PropertyInfo to discover information such as the name, data type, declaring type, reflected type, and read-only or writable status of a property, and to get or set property values.

  • Verwenden Sie ParameterInfo, um Informationen wie den Namen eines Parameters, den Datentyp, ob es sich um einen Eingabe- oder Ausgabeparameter handelt und die Position des Parameters in der Methodensignatur abzurufen.Use ParameterInfo to discover information such as a parameter's name, data type, whether a parameter is an input or output parameter, and the position of the parameter in a method signature.

  • Verwenden Sie CustomAttributeData, um Informationen zu benutzerdefinierten Attributen abzurufen, wenn Sie im ausschließlich reflektionsbezogenen Kontext einer Anwendungsdomäne arbeiten.Use CustomAttributeData to discover information about custom attributes when you are working in the reflection-only context of an application domain. CustomAttributeData ermöglicht Ihnen, Attribute zu überprüfen, ohne Instanzen hiervon erstellen zu müssen.CustomAttributeData allows you to examine attributes without creating instances of them.

Die Klassen des System.Reflection.Emit-Namespace stellen eine spezielle Form der Reflektion bereit, die es Ihnen ermöglicht, Typen zur Laufzeit zu erstellen.The classes of the System.Reflection.Emit namespace provide a specialized form of reflection that enables you to build types at run time.

Reflektionen können auch zum Erstellen von Anwendungen verwendet werden, die als Typbrowser bezeichnet werden und es dem Benutzer ermöglichen, Typen auszuwählen und dann Informationen zu diesen Typen anzuzeigen.Reflection can also be used to create applications called type browsers, which enable users to select types and then view the information about those types.

Dies ist eine weitere Verwendungsmöglichkeit von Reflektionen.There are other uses for reflection. Compiler für Sprachen wie JScript verwenden Reflektionen, um Symboltabellen zu erstellen.Compilers for languages such as JScript use reflection to construct symbol tables. Die Klassen im System.Runtime.Serialization-Namespace verwenden Reflektionen, um auf Daten zuzugreifen und um festzustellen, welche Felder beibehalten werden.The classes in the System.Runtime.Serialization namespace use reflection to access data and to determine which fields to persist. Die Klassen im System.Runtime.Remoting-Namespace verwenden Reflektionen indirekt über die Serialisierung.The classes in the System.Runtime.Remoting namespace use reflection indirectly through serialization.

Laufzeittypen in ReflektionRuntime Types in Reflection

Reflektion stellt Klassen wie Type und MethodInfo bereit, um Typen, Member, Parameter und andere Codeentitäten darzustellen.Reflection provides classes, such as Type and MethodInfo, to represent types, members, parameters, and other code entities. Wenn Sie jedoch Reflektion verwenden, arbeiten Sie nicht direkt mit diesen Klassen, von denen die meisten abstrakt sind (MustInherit in Visual Basic).However, when you use reflection you don't work directly with these classes, most of which are abstract (MustInherit in Visual Basic). Stattdessen arbeiten Sie mit Typen, die von der CLR (Common Language Runtime) bereitgestellt werden.Instead, you work with types provided by the common language runtime (CLR).

Wenn Sie beispielsweise den C#-Operator typeof (GetType in Visual Basic) verwenden, um ein Type-Objekt abzurufen, handelt es sich in Wirklichkeit um ein RuntimeType-Objekt.For example, when you use the C# typeof operator (GetType in Visual Basic) to obtain a Type object, the object is really a RuntimeType. RuntimeType wird von Type abgeleitet und stellt Implementierungen aller abstrakten Methoden bereit.RuntimeType derives from Type, and provides implementations of all the abstract methods.

Diese Laufzeitklassen sind internal (Friend in Visual Basic).These runtime classes are internal (Friend in Visual Basic). Sie werden nicht getrennt von den Basisklassen dokumentiert, da ihr Verhalten in der Dokumentation der Basisklasse beschrieben wird.They are not documented separately from their base classes, because their behavior is described by the base class documentation.

TitelTitle descriptionDescription
Anzeigen von TypinformationenViewing Type Information Beschreibt die Type-Klasse und stellt Codebeispiele bereit, die zeigen, wie Type mit verschiedenen Reflektionsklassen verwendet wird, um Informationen zu Konstruktoren, Methoden, Feldern, Eigenschaften und Ereignissen abzurufen.Describes the Type class and provides code examples that illustrate how to use Type with several reflection classes to obtain information about constructors, methods, fields, properties, and events.
Reflektion und generische TypenReflection and Generic Types Erläutert, wie die Reflektion die Typparameter und die Typargumente von generischen Typen und generischen Methoden behandelt.Explains how reflection handles the type parameters and type arguments of generic types and generic methods.
Security Considerations for Reflection (Sicherheitsüberlegungen für die Reflektion)Security Considerations for Reflection Beschreibt die Regeln, die festlegen, bis zu welchem Grad Reflektion verwendet werden kann, um Typinformationen abzurufen und auf Typen zuzugreifen.Describes the rules that determine to what degree reflection can be used to discover type information and access types.
Dynamically Loading and Using Types (Dynamisches Laden und Verwenden von Typen)Dynamically Loading and Using Types Beschreibt die benutzerdefinierte Bindungsschnittstelle der Reflektion, die spätes Binden unterstützt.Describes the reflection custom-binding interface that supports late binding.
Gewusst wie: Laden von Assemblys in den reflektionsbezogenen KontextHow to: Load Assemblies into the Reflection-Only Context Beschreibt den reflektionsbezogenen Ladungskontext.Describes the reflection-only load context. Zeigt, wie eine Assembly geladen wird, wie der Kontext getestet und wie die Attribute überprüft werden, die im reflektionsbezogenen Kontext auf eine Assembly angewendet wurden.Shows how to load an assembly, how to test the context, and how to examine attributes applied to an assembly in the reflection-only context.
Accessing Custom Attributes (Zugreifen auf benutzerdefinierte Attribute)Accessing Custom Attributes Zeigt, wie mithilfe der Reflektion das Vorhandensein von Attributen und Werten abgefragt werden kann.Demonstrates using reflection to query attribute existence and values.
Specifying Fully Qualified Type Names (Angeben vollqualifizierter Typnamen)Specifying Fully Qualified Type Names Beschreibt das Format von vollqualifizierten Typnamen mit den Begriffen von BNF (Backus-Naur Form) sowie die Syntax, die erforderlich ist, um Sonderzeichen, Assemblynamen, Zeiger, Verweise und Arrays anzugeben.Describes the format of fully qualified type names in terms of the Backus-Naur form (BNF), and the syntax required for specifying special characters, assembly names, pointers, references, and arrays.
How to: Hook Up a Delegate Using Reflection (Vorgehensweise: Verknüpfen mit einem Delegaten mit Reflektion)How to: Hook Up a Delegate Using Reflection Erläutert, wie ein Delegat für eine Methode erstellt und dieser Delegat mit einem Ereignis verknüpft wird.Explains how to create a delegate for a method and hook the delegate up to an event. Beschreibt, wie eine Ereignisbehandlungsmethode zur Laufzeit mit DynamicMethod erstellt wird.Explains how to create an event-handling method at run time using DynamicMethod.
Ausgeben von dynamischen Methoden und AssemblysEmitting Dynamic Methods and Assemblies Erläutert, wie dynamische Assemblys und dynamische Methoden generiert werden.Explains how to generate dynamic assemblies and dynamic methods.

VerweisReference

System.Type

System.Reflection

System.Reflection.Emit