Share via


Weerspiegeling in .NET

Met de klassen in de System.Reflection naamruimte kunt u samen met System.Typeu informatie verkrijgen over geladen assembly's en de typen die erin zijn gedefinieerd, zoals klassen, interfaces en waardetypen (dat wil gezegd, structuren en opsommingen). U kunt ook reflectie gebruiken om typeexemplaren te maken tijdens runtime en om ze aan te roepen en te openen.

Assembly's bevatten modules, modules bevatten typen en typen bevatten leden. Weerspiegeling biedt objecten die assembly's, modules en typen inkapselen. U kunt reflectie gebruiken om dynamisch een exemplaar van een type te maken, het type te binden aan een bestaand object of het type op te halen uit een bestaand object. Vervolgens kunt u de methoden van het type aanroepen of de bijbehorende velden en eigenschappen openen. Typische toepassingen van weerspiegeling zijn onder andere:

  • Hiermee Assembly definieert en laadt u assembly's, laadt u modules die worden vermeld in het assemblymanifest en zoekt u een type van deze assembly en maakt u er een exemplaar van.
  • Gebruik Module deze functie om informatie te detecteren, zoals de assembly die de module en de klassen in de module bevat. U kunt ook alle globale methoden of andere specifieke, niet-globale methoden ophalen die in de module zijn gedefinieerd.
  • Gebruik ConstructorInfo deze functie om informatie te detecteren zoals de naam, parameters, toegangsaanpassingen (zoals public of private) en implementatiedetails (zoals abstract of virtual) van een constructor. Gebruik de GetConstructors of GetConstructor methode van een Type om een specifieke constructor aan te roepen.
  • Gebruik MethodInfo deze functie om informatie te detecteren, zoals de naam, het retourtype, parameters, toegangsaanpassingen en implementatiedetails (zoals abstract of virtual) van een methode. Gebruik de GetMethods of GetMethod methode van een Type methode om een specifieke methode aan te roepen.
  • Gebruik FieldInfo deze functie om informatie zoals de naam, toegangsaanpassingen en implementatiedetails (zoals static) van een veld te detecteren en veldwaarden op te halen of in te stellen.
  • Gebruik EventInfo deze functie om informatie te detecteren, zoals de naam, het gebeurtenis-handlergegevenstype, aangepaste kenmerken, het declareren van het type en het weerspiegelingstype van een gebeurtenis, en om gebeurtenis-handlers toe te voegen of te verwijderen.
  • Gebruik PropertyInfo deze functie om informatie te detecteren, zoals de naam, het gegevenstype, het declareren van het type, het weerspiegelingstype en het kenmerk Alleen-lezen of beschrijfbare status van een eigenschap, en om eigenschapswaarden op te halen of in te stellen.
  • Gebruik ParameterInfo deze functie om informatie te detecteren, zoals de naam van een parameter, het gegevenstype, of een parameter een invoer- of uitvoerparameter is en de positie van de parameter in een methodehandtekening.
  • Gebruik CustomAttributeData deze optie om informatie over aangepaste kenmerken te ontdekken wanneer u werkt in de MetadataLoadContext context alleen weerspiegeling (.NET Framework). CustomAttributeData hiermee kunt u kenmerken onderzoeken zonder dat u exemplaren van deze kenmerken hoeft te maken.

De klassen van de System.Reflection.Emit naamruimte bieden een gespecialiseerde vorm van reflectie waarmee u typen tijdens runtime kunt bouwen.

Weerspiegeling kan ook worden gebruikt om typebrowsers te maken, zodat gebruikers typen kunnen selecteren en vervolgens de informatie over deze typen kunnen bekijken.

Er zijn andere toepassingen voor reflectie. Compilers voor talen zoals JScript gebruiken weerspiegeling om symbooltabellen te maken. De klassen in de System.Runtime.Serialization naamruimte gebruiken weerspiegeling voor toegang tot gegevens en om te bepalen welke velden moeten worden bewaard. De klassen in de System.Runtime.Remoting naamruimte gebruiken indirect weerspiegeling door middel van serialisatie.

Runtimetypen in weerspiegeling

Weerspiegeling biedt klassen, zoals Type en MethodInfo, om typen, leden, parameters en andere code-entiteiten weer te geven. Wanneer u echter weerspiegeling gebruikt, werkt u niet rechtstreeks met deze klassen, waarvan de meeste abstract zijn (MustInherit in Visual Basic). In plaats daarvan werkt u met typen die worden geleverd door de Common Language Runtime (CLR).

Als u bijvoorbeeld de C# typeof -operator (GetType in Visual Basic) gebruikt om een Type object te verkrijgen, is het object echt een RuntimeType. RuntimeType is afgeleid van Type en biedt implementaties van alle abstracte methoden.

Deze runtimeklassen zijn internal (Friend in Visual Basic). Ze worden niet afzonderlijk van hun basisklassen gedocumenteerd, omdat hun gedrag wordt beschreven in de documentatie van de basisklasse.

Verwijzing