CustomReflectionContext Klass

Definition

Representerar en anpassningsbar reflektionskontext.

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
Arv
CustomReflectionContext
Härledda

Exempel

I följande exempel visas hur du underklassar CustomReflectionContext för att lägga till ett anpassat attribut till alla medlemmar av en viss typ vars namn börjar med "Till". Om du vill köra den här koden klistrar du in den i ett tomt konsolprojekt och ser till att inkludera en referens till System.Reflection.Context.dll.

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

//Reflection context with custom rules.
class myCRC : 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")) {
                   yield return new myAttribute();
               }
               //Keep existing attributes as well.
               foreach (var attr in declaredAttributes) yield return attr;
         }
}

class Program
{
    static void Main(string[] args)
    {
        myCRC mc = new myCRC();
        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 all the members of the type and their attributes.
        foreach (MemberInfo m in myTI.DeclaredMembers)
        {
           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();

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

        Console.WriteLine();

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

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

        Console.ReadLine();
    }
}

Kommentarer

CustomReflectionContext ger dig ett sätt att lägga till eller ta bort anpassade attribut från reflektionsobjekt, eller lägga till dummy-egenskaper till dessa objekt, utan att implementera den fullständiga reflektionsmodellen igen. Standardinställningen CustomReflectionContext omsluter bara reflektionsobjekt utan att göra några ändringar, men genom att underklassa och åsidosätta relevanta metoder kan du lägga till, ta bort eller ändra de attribut som gäller för en reflekterad parameter eller medlem eller lägga till nya egenskaper i en reflekterad typ.

Anta till exempel att koden följer konventionen om att tillämpa ett visst attribut på fabriksmetoder, men du måste nu arbeta med kod från tredje part som saknar attribut. Du kan använda CustomReflectionContext för att ange en regel för att identifiera de objekt som ska ha attribut och för att ange objekten med dessa attribut när de visas från koden.

För att kunna använda CustomReflectionContext effektivt måste koden som använder de reflekterade objekten stödja begreppet att ange en reflektionskontext, i stället för att anta att alla reflekterade objekt är associerade med kontexten för körningsreflektion. Många reflektionsmetoder i .NET Framework tillhandahåller en ReflectionContext parameter för detta ändamål.

För att ändra attributen som tillämpas på en reflekterad parameter eller medlem, åsidosätt metoden GetCustomAttributes(ParameterInfo, IEnumerable<Object>) eller GetCustomAttributes(MemberInfo, IEnumerable<Object>). Dessa metoder tar det reflekterade objektet och listan över attribut under dess aktuella reflektionskontext och returnerar listan över attribut som det ska ha under den anpassade reflektionskontexten.

Varning

CustomReflectionContext metoder bör inte komma åt listan över attribut för ett reflekterat objekt eller en metod direkt genom att anropa GetCustomAttributes metoden på den angivna MemberInfo instansen eller ParameterInfo instansen, utan i stället använda declaredAttributes listan, som skickas som en parameter till GetCustomAttributes metodöverlagringarna.

Om du vill lägga till egenskaper i en reflekterad typ åsidosätter du AddProperties metoden. Metoden accepterar en parameter som anger den reflekterade typen och returnerar en lista med ytterligare egenskaper. Du bör använda CreateProperty metoden för att skapa egenskapsobjekt som ska returneras. Du kan ange ombud när du skapar egenskapen som ska fungera som egenskapsåtkomst och du kan utelämna någon av åtkomsterna för att skapa en skrivskyddad eller skrivskyddad egenskap. Observera att sådana dummyegenskaper inte har stöd för metadata eller CIL (Common Intermediate Language).

Varning

Var försiktig med likhet mellan reflekterade objekt när du arbetar med reflektionskontexter, eftersom objekt kan representera samma reflekterade objekt i flera kontexter. Du kan använda MapType metoden för att hämta en viss reflektionskontexts version av ett reflekterat objekt.

Varning

Ett CustomReflectionContext objekt ändrar attributen som returneras av ett visst reflektionsobjekt, till exempel de som hämtas av GetCustomAttributes metoden. Den ändrar inte de anpassade attributdata som returneras av GetCustomAttributesData metoden och dessa två listor matchar inte när du använder en anpassad reflektionskontext.

Konstruktorer

Name Description
CustomReflectionContext()

Initierar en ny instans av CustomReflectionContext klassen.

CustomReflectionContext(ReflectionContext)

Initierar en ny instans av CustomReflectionContext klassen med den angivna reflektionskontexten som bas.

Metoder

Name Description
AddProperties(Type)

När åsidosättas i en härledd klass, tillhandahåller en samling ytterligare egenskaper för den angivna typen, som representeras i den här reflektionskontexten.

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

Skapar ett objekt som representerar en egenskap som ska läggas till i en typ, som ska användas med AddProperties(Type) metoden och med hjälp av de angivna anpassade attributen.

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

Skapar ett objekt som representerar en egenskap som ska läggas till i en typ som ska användas med AddProperties(Type) metoden.

Equals(Object)

Avgör om det angivna objektet är lika med det aktuella objektet.

(Ärvd från Object)
GetCustomAttributes(MemberInfo, IEnumerable<Object>)

När det åsidosättas i en härledd klass, innehåller en lista över anpassade attribut för den angivna medlemmen, som representeras i den här reflektionskontexten.

GetCustomAttributes(ParameterInfo, IEnumerable<Object>)

När den åsidosättas i en härledd klass, innehåller en lista över anpassade attribut för den angivna parametern, som representeras i den här reflektionskontexten.

GetHashCode()

Fungerar som standard-hash-funktion.

(Ärvd från Object)
GetType()

Hämtar den aktuella instansen Type .

(Ärvd från Object)
GetTypeForObject(Object)

Hämtar representationen av typen av det angivna objektet i den här reflektionskontexten.

(Ärvd från ReflectionContext)
MapAssembly(Assembly)

Hämtar representationen i den här reflektionskontexten av en sammansättning som representeras av ett objekt från en annan reflektionskontext.

MapType(TypeInfo)

Hämtar representationen i den här reflektionskontexten av en typ som representeras av ett objekt från en annan reflektionskontext.

MemberwiseClone()

Skapar en ytlig kopia av den aktuella Object.

(Ärvd från Object)
ToString()

Returnerar en sträng som representerar det aktuella objektet.

(Ärvd från Object)

Gäller för