CustomReflectionContext Klas

Definitie

Vertegenwoordigt een aanpasbare weerspiegelingscontext.

public ref class CustomReflectionContext abstract : System::Reflection::ReflectionContext
public abstract class CustomReflectionContext : System.Reflection.ReflectionContext
type CustomReflectionContext = class
    inherit ReflectionContext
Public MustInherit Class CustomReflectionContext
Inherits ReflectionContext
Overname
CustomReflectionContext
Afgeleid

Opmerkingen

CustomReflectionContext biedt een manier om aangepaste kenmerken toe te voegen aan of te verwijderen uit weerspiegelingsobjecten of dummy-eigenschappen toe te voegen aan die objecten, zonder het volledige weerspiegelingsmodel opnieuw te implementeren. Met de standaardinstelling CustomReflectionContext worden weerspiegelingsobjecten verpakt zonder wijzigingen aan te brengen, maar door de relevante methoden te subklasseren en te overschrijven, kunt u de kenmerken toevoegen, verwijderen of wijzigen die van toepassing zijn op een weerspiegelde parameter of lid, of nieuwe eigenschappen toevoegen aan een weerspiegeld type.

Stel dat uw code voldoet aan de conventie voor het toepassen van een bepaald kenmerk op factory-methoden, maar u nu moet werken met code van derden die geen kenmerken heeft. U kunt CustomReflectionContext een regel opgeven voor het identificeren van de objecten die kenmerken moeten hebben en om de objecten met deze kenmerken op te geven wanneer ze worden weergegeven vanuit uw code.

Om CustomReflectionContext effectief te gebruiken, moet de code die van de gereflecteerde objecten gebruikmaakt ondersteuning bieden voor het specificeren van een reflectiecontext, in plaats van aan te nemen dat alle gereflecteerde objecten met de runtime reflectiecontext zijn gekoppeld. Veel reflectiemethoden in .NET hiervoor een ReflectionContext parameter opgeven.

Als u de kenmerken wilt wijzigen die worden toegepast op een weerspiegelde parameter of lid, overschrijft u de GetCustomAttributes(ParameterInfo, IEnumerable<Object>) of GetCustomAttributes(MemberInfo, IEnumerable<Object>) methode. Deze methoden nemen het weerspiegelde object en de lijst met kenmerken onder de huidige weerspiegelingscontext en retourneren de lijst met kenmerken die het moet hebben onder de aangepaste weerspiegelingscontext.

Warning

CustomReflectionContext onderdrukkingen mogen geen querykenmerken uitvoeren op de opgegeven MemberInfo of ParameterInfo door aanroepen GetCustomAttributes; gebruik in plaats daarvan de declaredAttributes reeks die is doorgegeven aan de GetCustomAttributes overbelastingen.

Als u eigenschappen wilt toevoegen aan een weerspiegeld type, overschrijft u de AddProperties methode. De methode accepteert een parameter die het weerspiegelde type aangeeft en retourneert een lijst met aanvullende eigenschappen. U moet de CreateProperty methode gebruiken om eigenschapsobjecten te maken die moeten worden geretourneerd. U kunt gedelegeerden opgeven bij het maken van de eigenschap die als eigenschapstoegangsfunctie fungeert, en u kunt een van de toegangsfuncties weglaten om een alleen-lezen of alleen-schrijven eigenschap te maken. Houd er rekening mee dat dergelijke dummy-eigenschappen geen metagegevens of CIL-back-ups (Common Intermediate Language) hebben.

Warning

  • Wees voorzichtig met gelijkheid tussen weerspiegelde objecten wanneer u met weerspiegelingscontexten werkt, omdat objecten hetzelfde weerspiegelde object in meerdere contexten kunnen vertegenwoordigen. U kunt de MapType methode gebruiken om de versie van een weerspiegelingscontext van een weerspiegeld object te verkrijgen.
  • Een CustomReflectionContext object wijzigt de kenmerken die worden geretourneerd door een bepaald weerspiegelingsobject, zoals kenmerken die zijn verkregen door de GetCustomAttributes methode. De aangepaste kenmerkgegevens die door de GetCustomAttributesData methode worden geretourneerd, worden niet gewijzigd. Deze twee lijsten komen niet overeen wanneer u een aangepaste weerspiegelingscontext gebruikt.

In het volgende voorbeeld ziet u hoe u een subclass CustomReflectionContext gebruikt om een aangepast kenmerk toe te voegen aan alle leden van een bepaald type waarvan de namen beginnen met 'To'.

// A blank example attribute.
class MyAttribute : Attribute
{
}

// Reflection context with custom rules.
class MyCustomReflectionContext : CustomReflectionContext
{
    // Called whenever the reflection context checks for custom attributes.
    protected override IEnumerable<object> GetCustomAttributes(MemberInfo member, IEnumerable<object> declaredAttributes)
    {
        // Add example attribute to "To*" members.
        if (member.Name.StartsWith("To", StringComparison.Ordinal))
        {
            yield return new MyAttribute();
        }
        // Keep existing attributes as well.
        foreach (object attr in declaredAttributes)
        {
            yield return attr;
        }
    }
}
MyCustomReflectionContext mc = new();
Type t = typeof(string);

// A representation of the type in the default reflection context.
TypeInfo ti = t.GetTypeInfo();

// A representation of the type in the customized reflection context.
TypeInfo myTI = mc.MapType(ti);

// Display affected members of the type ("To*") and their attributes.
foreach (MemberInfo m in myTI.DeclaredMembers.Where(static m => m.Name.StartsWith("To", StringComparison.Ordinal)))
{
    Console.WriteLine($"{m.Name}:");
    foreach (Attribute cd in m.GetCustomAttributes())
    {
        Console.WriteLine(cd.GetType());
    }
}

Console.WriteLine();

// The "ToString" member as represented in the default reflection context.
MemberInfo mi1 = ti.GetDeclaredMethods("ToString").FirstOrDefault();

Attribute[] defaultAttributes = mi1.GetCustomAttributes().ToArray();

// All the attributes of "ToString" in the default reflection context.
Console.WriteLine("'ToString' Attributes in Default Reflection Context:");
foreach (Attribute cd in defaultAttributes)
{
    Console.WriteLine(cd.GetType());
}

Console.WriteLine();

// The same member in the custom reflection context.
mi1 = myTI.GetDeclaredMethods("ToString").FirstOrDefault();

Attribute[] customAttributes = mi1.GetCustomAttributes().ToArray();

// All its attributes, for comparison. MyAttribute is now included.
Console.WriteLine("'ToString' Attributes in Custom Reflection Context:");
foreach (Attribute cd in customAttributes)
{
    Console.WriteLine(cd.GetType());
}

Constructors

Name Description
CustomReflectionContext()

Initialiseert een nieuw exemplaar van de CustomReflectionContext klasse.

CustomReflectionContext(ReflectionContext)

Initialiseert een nieuw exemplaar van de CustomReflectionContext klasse met de opgegeven weerspiegelingscontext als basis.

Methoden

Name Description
AddProperties(Type)

Wanneer deze wordt overschreven in een afgeleide klasse, biedt u een verzameling aanvullende eigenschappen voor het opgegeven type, zoals weergegeven in deze weerspiegelingscontext.

CreateProperty(Type, String, Func<Object,Object>, Action<Object,Object>, IEnumerable<Attribute>, IEnumerable<Attribute>, IEnumerable<Attribute>)

Hiermee maakt u een object dat een eigenschap vertegenwoordigt die moet worden toegevoegd aan een type, voor gebruik met de AddProperties(Type) methode en het gebruik van de opgegeven aangepaste kenmerken.

CreateProperty(Type, String, Func<Object,Object>, Action<Object,Object>)

Hiermee maakt u een object dat een eigenschap vertegenwoordigt die moet worden toegevoegd aan een type, die moet worden gebruikt met de AddProperties(Type) methode.

Equals(Object)

Bepaalt of het opgegeven object gelijk is aan het huidige object.

(Overgenomen van Object)
GetCustomAttributes(MemberInfo, IEnumerable<Object>)

Wanneer deze wordt overschreven in een afgeleide klasse, geeft u een lijst met aangepaste kenmerken voor het opgegeven lid op, zoals weergegeven in deze weerspiegelingscontext.

GetCustomAttributes(ParameterInfo, IEnumerable<Object>)

Wanneer deze wordt overschreven in een afgeleide klasse, geeft u een lijst met aangepaste kenmerken voor de opgegeven parameter op, zoals weergegeven in deze weerspiegelingscontext.

GetHashCode()

Fungeert als de standaardhashfunctie.

(Overgenomen van Object)
GetType()

Hiermee haalt u de Type huidige instantie op.

(Overgenomen van Object)
GetTypeForObject(Object)

Hiermee wordt de weergave opgehaald van het type van het opgegeven object in deze reflectiecontext.

(Overgenomen van ReflectionContext)
MapAssembly(Assembly)

Hiermee haalt u de weergave, in deze weerspiegelingscontext, op van een assembly die wordt vertegenwoordigd door een object uit een andere context van weerspiegeling.

MapType(TypeInfo)

Hiermee haalt u de weergave, in deze weerspiegelingscontext, op van een type dat wordt vertegenwoordigd door een object uit een andere context van weerspiegeling.

MemberwiseClone()

Hiermee maakt u een ondiepe kopie van de huidige Object.

(Overgenomen van Object)
ToString()

Retourneert een tekenreeks die het huidige object vertegenwoordigt.

(Overgenomen van Object)

Van toepassing op