CustomReflectionContext-Klasse

.NET Framework 4.5

Stellt einen benutzerdefinierten Reflektionskontext dar.

Namespace:  System.Reflection.Context
Assembly:  System.Reflection.Context (in System.Reflection.Context.dll)

public abstract class CustomReflectionContext : ReflectionContext

Der CustomReflectionContext-Typ macht die folgenden Member verfügbar.

  NameBeschreibung
Geschützte MethodeUnterstützt in .NET für Windows Store-AppsCustomReflectionContext()Initialisiert eine neue Instanz der CustomReflectionContext-Klasse.
Geschützte MethodeUnterstützt in .NET für Windows Store-AppsCustomReflectionContext(ReflectionContext)Initialisiert eine neue Instanz der CustomReflectionContext-Klasse mit der angegebenen Codebasis und Reflektionskontext als Grundlage
Zum Seitenanfang

  NameBeschreibung
Geschützte MethodeUnterstützt in .NET für Windows Store-AppsAddPropertiesStellt beim Überschreiben in einer abgeleiteten Klasse eine Auflistung für zusätzliche Eigenschaften für den angegebenen Typ bereit, wie in diesem Reflektionskontext dargestellt.
Geschützte MethodeUnterstützt in .NET für Windows Store-AppsCreateProperty(Type, String, Func<Object, Object>, Action<Object, Object>)Erstellt ein Objekt, das eine Eigenschaft darstellt, die einem Typ hinzugefügt werden soll, der von der AddProperties-Methode verwendet werden soll.
Geschützte MethodeUnterstützt in .NET für Windows Store-AppsCreateProperty(Type, String, Func<Object, Object>, Action<Object, Object>, IEnumerable<Attribute>, IEnumerable<Attribute>, IEnumerable<Attribute>)Erstellt ein Objekt, das eine Eigenschaft darstellt, die einem Typ hinzugefügt werden soll, der von der AddProperties-Methode verwendet werden soll und die angegebenen benutzerdefinierten Attribute verwendet.
Öffentliche MethodeUnterstützt in .NET für Windows Store-AppsEquals(Object)Bestimmt, ob das angegebene Objekt mit dem aktuellen Objekt identisch ist. (Von Object geerbt.)
Geschützte MethodeUnterstützt in .NET für Windows Store-AppsFinalize Gibt einem Objekt Gelegenheit, Ressourcen freizugeben und andere Bereinigungen durchzuführen, bevor es von der Garbage Collection freigegeben wird. (Von Object geerbt.)
Geschützte MethodeUnterstützt in .NET für Windows Store-AppsGetCustomAttributes(MemberInfo, IEnumerable<Object>)Stellt beim Überschreiben in einer abgeleiteten Klasse eine Liste benutzerdefinierter Attribute für den angegebenen Member bereit, wie in diesem Reflektionskontext dargestellt.
Geschützte MethodeUnterstützt in .NET für Windows Store-AppsGetCustomAttributes(ParameterInfo, IEnumerable<Object>)Stellt beim Überschreiben in einer abgeleiteten Klasse eine Liste benutzerdefinierter Attribute für den angegebenen Parameter bereit, wie in diesem Reflektionskontext dargestellt.
Öffentliche MethodeUnterstützt in .NET für Windows Store-AppsGetHashCodeFungiert als die Standardhashfunktion. (Von Object geerbt.)
Öffentliche MethodeUnterstützt in .NET für Windows Store-AppsGetTypeRuft den Type der aktuellen Instanz ab. (Von Object geerbt.)
Öffentliche MethodeUnterstützt in .NET für Windows Store-AppsGetTypeForObjectRuft die Darstellung des Typs des angegebenen Objekts in diesem Reflektionskontext ab. (Von ReflectionContext geerbt.)
Öffentliche MethodeUnterstützt in .NET für Windows Store-AppsMapAssemblyRuft die Darstellung einer Assembly in diesem Reflektionskontext ab, die durch ein Objekt von einem anderen Reflektionskontext dargestellt wird. (Überschreibt ReflectionContext.MapAssembly(Assembly).)
Öffentliche MethodeUnterstützt in .NET für Windows Store-AppsMapTypeRuft die Darstellung eines Typs in diesem Reflektionskontext ab, der durch ein Objekt von einem anderen Reflektionskontext dargestellt wird. (Überschreibt ReflectionContext.MapType(TypeInfo).)
Geschützte MethodeUnterstützt in .NET für Windows Store-AppsMemberwiseCloneErstellt eine flache Kopie des aktuellen Object. (Von Object geerbt.)
Öffentliche MethodeUnterstützt in .NET für Windows Store-AppsToStringGibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Von Object geerbt.)
Zum Seitenanfang

CustomReflectionContext stellt eine Methode bereit, sodass Sie benutzerdefinierte Attribute aus den Reflektionsobjekten hinzufügen oder entfernen und fügt einem Dummy- Eigenschaften diesen Objekten hinzu, ohne vollständige das Reflektionsmodell erneut implementieren. Der standardmäßige CustomReflectionContext bindet einfach Reflektionsobjekte ein, ohne Änderungen vorzunehmen, sondern, indem Sie die entsprechenden Methoden unterordnen und überschreiben, können Sie die Attribute hinzufügen, entfernen oder ändern, die auf jeden reflektierten Parameter oder Member gelten, oder fügen neuen Eigenschaften reflektierten einem Typ.

Angenommen, Code der Konvention der Anwendung eines bestimmten Attributs an Factorymethoden folgt, aber Sie müssen jetzt, mit Code zu arbeiten eines Drittanbieters an, der Attribute nicht unterstützt. Sie können CustomReflectionContext verwenden, um einer Regel zum Identifizieren von Objekten anzugeben, Attribute verfügen und die Objekte mit diesen Attributen bereitstellen sollten, wenn sie vom Code angezeigt werden.

Um CustomReflectionContext effektiv zu verwenden, muss der Code der die reflektierten Objekte wird der Begriff der Angabe eines Reflektionskontexts unterstützen, anstatt anzunehmen dass alle reflektierten Objekte mit dem Ablaufreflektionskontext zugeordnet werden. Viele Reflektionsmethoden in .NET Framework bieten einen Parameter ReflectionContext zu diesem Zweck.

Um die Attribute zu ändern die einem reflektierten Parameter oder Member angewendet werden, überschreiben Sie das GetCustomAttributes(ParameterInfo, IEnumerable<Object>) oder die GetCustomAttributes(MemberInfo, IEnumerable<Object>) methode. Diese Methoden nehmen das reflektierte Objekt und die Liste von Attributen mit aktuellen Reflektionskontext und die Liste von Attributen zurück, die sie mit dem benutzerdefinierten Reflektionskontext haben soll.

WarnhinweisVorsicht

CustomReflectionContext -Methoden sollten auf die Liste von Attributen eines reflektierten Objekts oder der Methode nicht direkt, indem sie die GetCustomAttributes-Methode auf das bereitgestellte MemberInfo oder der ParameterInfo-Instanz zugreifen, sondern aufrufen, sollten die declaredAttributes stattdessen Liste verwenden, die als Parameter der GetCustomAttributes-Methodenüberladung übergeben wird.

Um Eigenschaften einem reflektierten Typ hinzuzufügen, überschreiben Sie die AddProperties-Methode. Die Methode akzeptiert einen Parameter, der den Typ angibt reflektierten, und gibt eine Liste zusätzlicher Eigenschaften zurück. Sie sollten die CreateProperty methode verwenden, um von Eigenschaftenobjekten wieder zu erstellen. Sie können Delegaten, wenn das Erstellen der Eigenschaft, die als Eigenschaftenaccessor dient und Sie angeben einen der Accessoren ein schreibgeschütztes oder eine lesegeschützte Eigenschaft erstellen weglassen kann. Beachten Sie, dass solche blinden Eigenschaften keine Metadaten oder allgemeines Intermediate Language (CIL)- Zurückziehen haben.

WarnhinweisVorsicht

Legen Sie genau Gleichheit unter reflektierten Objekten vorsichtig, wenn Sie mit Reflektionskontexten arbeiten, da Objekte möglicherweise dasselbe reflektierte Objekt in mehreren Kontexten darstellen. Sie können die MapType-Methode verwenden, um bestimmte Reflektionskontexts eines reflektierten Objekts abzurufen Version eines.

WarnhinweisVorsicht

Ein CustomReflectionContext-Objekt ändert die Attribute, die von einem Reflektionsobjekt, wie die zurückgegeben werden, die durch die GetCustomAttributes-Methode abgerufen werden. Er ändert nicht die benutzerdefinierten Attributdaten, die durch die GetCustomAttributesData-Methode zurückgegeben werden, die zwei Listen derselben nicht ab, wenn Sie einen benutzerdefinierten Reflektionskontext verwenden.

Mit dem folgenden Beispiel wird veranschaulicht, wie als Unterklasse verwendet CustomReflectionContext, um einem benutzerdefinierten Attribut alle Member eines angegebenen Typs hinzuzufügen, den Namen "zu" beginnen. Um diesen Code auszuführen, fügen Sie ihn in ein leeres Konsolenprojekt ein, und stellen Sie sicher einen Verweis auf System.Reflection.Context.dll einzuschließen.


//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();
    }
}


.NET Framework

Unterstützt in: 4.5.2, 4.5.1, 4.5

.NET für Windows Store-Apps

Unterstützt in: Windows 8

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Alle öffentlichen static (Shared in Visual Basic)-Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.
Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)
Vielen Dank für Ihr Feedback.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft