CustomReflectionContext CustomReflectionContext CustomReflectionContext CustomReflectionContext Class

Definition

Stellt einen benutzerdefinierten Reflektionskontext dar.Represents a customizable reflection context.

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
Vererbung
CustomReflectionContextCustomReflectionContextCustomReflectionContextCustomReflectionContext
Abgeleitet

Beispiele

Im folgenden Beispiel wird gezeigt, wie die CustomReflectionContext Unterklasse zum Hinzufügen eines benutzerdefinierten Attributs zu allen Membern eines bestimmten Typs, deren Namen mit "to" beginnen, veranschaulicht wird.The following example demonstrates how to subclass CustomReflectionContext to add a custom attribute to all the members of a given type whose names begin with "To". Um diesen Code auszuführen, fügen Sie ihn in ein leeres Konsolen Projekt ein, und stellen Sie sicher, dass Sie einen Verweis auf "System. Reflection. Context. dll" einschließen.To run this code, paste it into an empty console project, and make sure to include a reference to 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();
    }
}

Hinweise

CustomReflectionContextbietet Ihnen die Möglichkeit, benutzerdefinierte Attribute aus Reflektionsobjekten hinzuzufügen oder zu entfernen oder diesen Objekten dummyeigenschaften hinzuzufügen, ohne das gesamte Reflektionstyp neu zu implementieren.CustomReflectionContext provides a way for you to add or remove custom attributes from reflection objects, or add dummy properties to those objects, without re-implementing the complete reflection model. Der Standard CustomReflectionContext umschließt Reflektionsobjekte einfach, ohne Änderungen vorzunehmen, aber durch das Unterklassen-und Überschreiben der relevanten Methoden können Sie die Attribute hinzufügen, entfernen oder ändern, die für jeden reflektierten Parameter oder Member gelten, oder einem reflektierter Typ.The default CustomReflectionContext simply wraps reflection objects without making any changes, but by subclassing and overriding the relevant methods, you can add, remove, or change the attributes that apply to any reflected parameter or member, or add new properties to a reflected type.

Angenommen, Ihr Code befolgt das Anwenden eines bestimmten Attributs auf Factorymethoden, aber Sie müssen jetzt mit Code von Drittanbietern arbeiten, der über keine Attribute verfügt.For example, suppose that your code follows the convention of applying a particular attribute to factory methods, but you are now required to work with third-party code that lacks attributes. Mithilfe von können CustomReflectionContext Sie eine Regel für die Identifizierung der Objekte angeben, die über Attribute verfügen sollen, und die Objekte mit diesen Attributen bereitstellen, wenn Sie im Code angezeigt werden.You can use CustomReflectionContext to specify a rule for identifying the objects that should have attributes and to supply the objects with those attributes when they are viewed from your code.

Um effektiv CustomReflectionContext zu verwenden, muss der Code, der die reflektierten Objekte verwendet, das Konzept der Angabe eines Reflektionskontexts unterstützen, anstatt anzunehmen, dass alle reflektierten Objekte dem Lauf Zeit Reflektionskontext zugeordnet sind.To use CustomReflectionContext effectively, the code that uses the reflected objects must support the notion of specifying a reflection context, instead of assuming that all reflected objects are associated with the runtime reflection context. Viele Reflektionsmethoden in der .NET Framework ReflectionContext stellen einen Parameter zu diesem Zweck bereit.Many reflection methods in the .NET Framework provide a ReflectionContext parameter for this purpose.

Um die Attribute zu ändern, die auf einen reflektierten Parameter oder Member angewendet werden GetCustomAttributes(ParameterInfo, IEnumerable<Object>) , GetCustomAttributes(MemberInfo, IEnumerable<Object>) überschreiben Sie die-oder die-Methode.To modify the attributes that are applied to a reflected parameter or member, override the GetCustomAttributes(ParameterInfo, IEnumerable<Object>) or GetCustomAttributes(MemberInfo, IEnumerable<Object>) method. Diese Methoden übernehmen das reflektierte Objekt und die Liste der Attribute unter dem aktuellen Reflektionskontext und geben die Liste der Attribute zurück, die es im benutzerdefinierten Reflektionskontext enthalten sollte.These methods take the reflected object and the list of attributes under its current reflection context, and return the list of attributes it should have under the custom reflection context.

Warnung

CustomReflectionContextMethoden sollten nicht direkt auf die Liste der Attribute eines reflektierten Objekts oder einer reflektierten Methode GetCustomAttributes zugreifen, indem Sie MemberInfo die ParameterInfo -Methode für die bereitgestellte- declaredAttributes oder-Instanz aufrufen, sondern stattdessen die Liste verwenden, die als Parameter übergeben wird. an die GetCustomAttributes -Methoden Überladungen.CustomReflectionContext methods should not access the list of attributes of a reflected object or method directly by calling the GetCustomAttributes method on the provided MemberInfo or ParameterInfo instance, but should instead use the declaredAttributes list, which is passed as a parameter to the GetCustomAttributes method overloads.

Um Eigenschaften zu einem reflektierten Typ hinzuzufügen, AddProperties überschreiben Sie die-Methode.To add properties to a reflected type, override the AddProperties method. Die-Methode akzeptiert einen Parameter, der den reflektierten Typ angibt, und gibt eine Liste zusätzlicher Eigenschaften zurück.The method accepts a parameter that specifies the reflected type, and returns a list of additional properties. Verwenden Sie die- CreateProperty Methode, um Eigenschafts Objekte zu erstellen, die zurückgegeben werden.You should use the CreateProperty method to create property objects to return. Sie können Delegaten angeben, wenn Sie die Eigenschaft erstellen, die als Eigenschafts Accessor fungiert, und Sie können einen der Accessoren weglassen, um eine schreibgeschützte oder schreibgeschützte Eigenschaft zu erstellen.You can specify delegates when creating the property that will serve as the property accessor, and you can omit one of the accessors to create a read-only or write-only property. Beachten Sie, dass solche Pseudo Eigenschaften keine Metadaten oder Common Intermediate Language (CIL) unterstützen.Note that such dummy properties have no metadata or Common Intermediate Language (CIL) backing.

Warnung

Seien Sie bei der Arbeit mit reflektionskontexten vorsichtig bei der Gleichheit zwischen reflektierten Objekten, da Objekte das gleiche reflektierte Objekt in mehreren Kontexten darstellen können.Be cautious about equality among reflected objects when you work with reflection contexts, because objects may represent the same reflected object in multiple contexts. Sie können die MapType -Methode verwenden, um die Version eines bestimmten Reflektionskontexts eines reflektierten Objekts abzurufen.You can use the MapType method to obtain a particular reflection context's version of a reflected object.

Warnung

Ein CustomReflectionContext -Objekt ändert die von einem bestimmten Reflektionsobjekt zurückgegebenen Attribute, z GetCustomAttributes . b. die von der-Methode erhaltenenA CustomReflectionContext object alters the attributes returned by a particular reflection object, such as those obtained by the GetCustomAttributes method. Die benutzerdefinierten Attributdaten, die von der GetCustomAttributesData -Methode zurückgegeben werden, werden nicht geändert, und diese beiden listenstimmen nicht ab, wenn Sie einen benutzerdefinierten Reflektionskontext verwenden.It does not alter the custom attribute data returned by the GetCustomAttributesData method, and these two lists will not match when you use a custom reflection context.

Konstruktoren

CustomReflectionContext() CustomReflectionContext() CustomReflectionContext() CustomReflectionContext()

Initialisiert eine neue Instanz der CustomReflectionContext-Klasse.Initializes a new instance of the CustomReflectionContext class.

CustomReflectionContext(ReflectionContext) CustomReflectionContext(ReflectionContext) CustomReflectionContext(ReflectionContext) CustomReflectionContext(ReflectionContext)

Initialisiert eine neue Instanz der CustomReflectionContext-Klasse mit der angegebenen Codebasis und Reflektionskontext als GrundlageInitializes a new instance of the CustomReflectionContext class with the specified reflection context as a base.

Methoden

AddProperties(Type) AddProperties(Type) AddProperties(Type) AddProperties(Type)

Stellt beim Überschreiben in einer abgeleiteten Klasse eine Auflistung für zusätzliche Eigenschaften für den angegebenen Typ bereit, wie in diesem Reflexionskontext dargestellt.When overridden in a derived class, provides a collection of additional properties for the specified type, as represented in this reflection context.

CreateProperty(Type, String, Func<Object,Object>, Action<Object,Object>) CreateProperty(Type, String, Func<Object,Object>, Action<Object,Object>) CreateProperty(Type, String, Func<Object,Object>, Action<Object,Object>) CreateProperty(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(Type)-Methode verwendet werden soll.Creates an object that represents a property to be added to a type, to be used with the AddProperties(Type) method.

CreateProperty(Type, String, Func<Object,Object>, Action<Object,Object>, IEnumerable<Attribute>, IEnumerable<Attribute>, IEnumerable<Attribute>) CreateProperty(Type, String, Func<Object,Object>, Action<Object,Object>, IEnumerable<Attribute>, IEnumerable<Attribute>, IEnumerable<Attribute>) CreateProperty(Type, String, Func<Object,Object>, Action<Object,Object>, IEnumerable<Attribute>, IEnumerable<Attribute>, IEnumerable<Attribute>) CreateProperty(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(Type)-Methode verwendet werden soll und die angegebenen benutzerdefinierten Attribute verwendet.Creates an object that represents a property to be added to a type, to be used with the AddProperties(Type) method and using the specified custom attributes.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Bestimmt, ob das angegebene Objekt mit dem aktuellen Objekt identisch ist.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetCustomAttributes(MemberInfo, IEnumerable<Object>) GetCustomAttributes(MemberInfo, IEnumerable<Object>) GetCustomAttributes(MemberInfo, IEnumerable<Object>) GetCustomAttributes(MemberInfo, IEnumerable<Object>)

Stellt beim Überschreiben in einer abgeleiteten Klasse eine Liste benutzerdefinierter Attribute für den angegebenen Member bereit, wie in diesem Reflexionskontext dargestellt.When overridden in a derived class, provides a list of custom attributes for the specified member, as represented in this reflection context.

GetCustomAttributes(ParameterInfo, IEnumerable<Object>) GetCustomAttributes(ParameterInfo, IEnumerable<Object>) GetCustomAttributes(ParameterInfo, IEnumerable<Object>) GetCustomAttributes(ParameterInfo, IEnumerable<Object>)

Stellt beim Überschreiben in einer abgeleiteten Klasse eine Liste benutzerdefinierter Attribute für den angegebenen Parameter bereit, wie in diesem Reflexionskontext dargestellt.When overridden in a derived class, provides a list of custom attributes for the specified parameter, as represented in this reflection context.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Fungiert als Standardhashfunktion.Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

Ruft den Type der aktuellen Instanz ab.Gets the Type of the current instance.

(Inherited from Object)
GetTypeForObject(Object) GetTypeForObject(Object) GetTypeForObject(Object) GetTypeForObject(Object)

Ruft die Darstellung des Typs des angegebenen Objekts in diesem Reflektionskontext ab.Gets the representation of the type of the specified object in this reflection context.

(Inherited from ReflectionContext)
MapAssembly(Assembly) MapAssembly(Assembly) MapAssembly(Assembly) MapAssembly(Assembly)

Ruft die Darstellung einer Assembly, die durch ein Objekt aus einem anderen Reflexionskontext dargestellt wird, in diesem Reflexionskontext ab.Gets the representation, in this reflection context, of an assembly that is represented by an object from another reflection context.

MapType(TypeInfo) MapType(TypeInfo) MapType(TypeInfo) MapType(TypeInfo)

Ruft die Darstellung eines Typs, der durch ein Objekt aus einem anderen Reflexionskontext dargestellt wird, in diesem Reflexionskontext ab.Gets the representation, in this reflection context, of a type represented by an object from another reflection context.

MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.Returns a string that represents the current object.

(Inherited from Object)

Gilt für: