CustomReflectionContext CustomReflectionContext CustomReflectionContext CustomReflectionContext Class

Définition

Représente un contexte de réflexion personnalisable.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
Héritage
CustomReflectionContextCustomReflectionContextCustomReflectionContextCustomReflectionContext
Dérivé

Exemples

L’exemple suivant montre comment créer une sous-classe CustomReflectionContext pour ajouter un attribut personnalisé à tous les membres d’un type donné, dont les noms commencent par « Vers ».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". Pour exécuter ce code, collez-le dans un projet de console vide et veillez à inclure une référence à System.Reflection.Context.dll.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();
    }
}

Remarques

CustomReflectionContext fournit un moyen ajouter ou supprimer des attributs personnalisés à partir d’objets de réflexion ou ajouter des propriétés factices à ces objets, sans avoir à ré-implémenter le modèle de réflexion terminé.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. La valeur par défaut CustomReflectionContext simplement la réflexion encapsule des objets sans apporter de modifications, mais par sous-classement et en remplaçant les méthodes pertinentes, vous pouvez ajouter, supprimer, ou modifier les attributs qui s’appliquent à n’importe quel paramètre reflété ou un membre ou ajoutez de nouvelles propriétés à un type réfléchi.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.

Par exemple, supposons que votre code suit la convention de l’application d’un attribut particulier aux méthodes de fabrique, mais vous devez maintenant pour travailler avec un code tiers qui ne dispose pas d’attributs.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. Vous pouvez utiliser CustomReflectionContext pour spécifier une règle pour identifier les objets qui doivent avoir des attributs et pour fournir les objets avec ces attributs lorsqu’ils sont visualisés à partir de votre code.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.

Pour utiliser CustomReflectionContext efficacement, le code qui utilise les objets réfléchis doit prendre en charge la notion de spécification d’un contexte de réflexion, au lieu d’assumer que toutes répercutées objets sont associés dans le contexte de réflexion du runtime.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. De nombreuses méthodes de réflexion dans le .NET Framework fournissent un ReflectionContext paramètre à cet effet.Many reflection methods in the .NET Framework provide a ReflectionContext parameter for this purpose.

Pour modifier les attributs qui sont appliqués à un paramètre reflété ou un membre, substituez le GetCustomAttributes(ParameterInfo, IEnumerable<Object>) ou GetCustomAttributes(MemberInfo, IEnumerable<Object>) (méthode).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. Ces méthodes prennent l’objet réfléchi et la liste des attributs dans son contexte de réflexion actuel et retournent la liste des attributs, qu'il doit avoir dans le contexte de réflexion personnalisés.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.

Avertissement

CustomReflectionContext méthodes doivent accéder à la liste des attributs d’une méthode ou un objet réfléchi pas directement en appelant le GetCustomAttributes méthode sur le MemberInfo ou ParameterInfo d’instance, mais utilisez plutôt le declaredAttributes liste, qui est passée comme paramètre pour le GetCustomAttributes surcharges de méthode.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.

Pour ajouter des propriétés à un type réfléchi, substituez le AddProperties (méthode).To add properties to a reflected type, override the AddProperties method. La méthode accepte un paramètre qui spécifie le type réfléchi et retourne une liste de propriétés supplémentaires.The method accepts a parameter that specifies the reflected type, and returns a list of additional properties. Vous devez utiliser le CreateProperty méthode pour créer des objets de propriété à retourner.You should use the CreateProperty method to create property objects to return. Vous pouvez spécifier des délégués lors de la création de la propriété qui servira de l’accesseur de propriété, et vous pouvez omettre un des accesseurs pour créer une propriété en lecture seule ou en écriture seule.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. Notez que ces propriétés factices n’ont aucune métadonnées ou la sauvegarde du langage CIL (Common Intermediate).Note that such dummy properties have no metadata or Common Intermediate Language (CIL) backing.

Avertissement

Méfiez-vous de l’égalité entre les objets réfléchis lorsque vous travaillez avec des contextes de réflexion, étant donné que les objets peuvent représenter le même objet réfléchi dans plusieurs contextes.Be cautious about equality among reflected objects when you work with reflection contexts, because objects may represent the same reflected object in multiple contexts. Vous pouvez utiliser la MapType méthode pour obtenir la version d’un contexte de réflexion particulière d’un objet réfléchi.You can use the MapType method to obtain a particular reflection context's version of a reflected object.

Avertissement

Un CustomReflectionContext objet modifie les attributs retournés par un objet particulier de réflexion, tels que ceux obtenus par le GetCustomAttributes (méthode).A CustomReflectionContext object alters the attributes returned by a particular reflection object, such as those obtained by the GetCustomAttributes method. Il ne modifie pas les données d’attribut personnalisé retournées par le GetCustomAttributesData (méthode) et ces deux listes ne correspondront pas lorsque vous utilisez un contexte de réflexion personnalisés.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.

Constructeurs

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

Initialise une nouvelle instance de la classe CustomReflectionContext.Initializes a new instance of the CustomReflectionContext class.

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

Initialise une nouvelle instance de la classe CustomReflectionContext avec le contexte de réflexion spécifié en tant que base.Initializes a new instance of the CustomReflectionContext class with the specified reflection context as a base.

Méthodes

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

En cas de substitution dans une classe dérivée, fournit une collection de propriétés supplémentaires pour le type spécifié, comme représenté dans ce contexte de réflexion.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>)

Crée un objet qui représente une propriété à ajouter à un type, à utiliser avec la méthode AddProperties(Type).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>)

Crée un objet qui représente une propriété à ajouter à un type, à utiliser avec la méthode AddProperties(Type), à l'aide des attributs personnalisés spécifiés.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)

Détermine si l'objet spécifié est identique à l'objet actuel.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>)

En cas de substitution dans une classe dérivée, fournit une liste d’attributs personnalisés pour le membre spécifié, comme représenté dans ce contexte de réflexion.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>)

En cas de substitution dans une classe dérivée, fournit une liste d’attributs personnalisés pour le paramètre spécifié, comme représenté dans ce contexte de réflexion.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()

Fait office de fonction de hachage par défaut.Serves as the default hash function.

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

Obtient le Type de l'instance actuelle.Gets the Type of the current instance.

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

Obtient la représentation du type de l'objet spécifié dans ce contexte de réflexion.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)

Obtient la représentation, dans ce contexte de réflexion, d’un assembly représenté par un objet à partir d’un autre contexte de réflexion.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)

Obtient la représentation, dans ce contexte de réflexion, d’un type représenté par un objet à partir d’un autre contexte de réflexion.Gets the representation, in this reflection context, of a type represented by an object from another reflection context.

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

Crée une copie superficielle du Object actuel.Creates a shallow copy of the current Object.

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

Retourne une chaîne qui représente l'objet actuel.Returns a string that represents the current object.

(Inherited from Object)

S’applique à