Partager via


CustomReflectionContext Classe

Définition

Représente un contexte de réflexion personnalisable.

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
CustomReflectionContext
Dérivé

Exemples

L’exemple suivant montre comment sous-classe CustomReflectionContext pour ajouter un attribut personnalisé à tous les membres d’un type donné dont les noms commencent par « À ». Pour exécuter ce code, collez-le dans un projet de console vide et veillez à inclure une référence à 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 vous permet d’ajouter ou de supprimer des attributs personnalisés à partir d’objets de réflexion, ou d’ajouter des propriétés factices à ces objets, sans réapplémenter le modèle de réflexion complet. La valeur par défaut CustomReflectionContext encapsule simplement les objets de réflexion sans apporter de modifications, mais en sous-classant et en remplaçant les méthodes appropriées, vous pouvez ajouter, supprimer ou modifier les attributs qui s’appliquent à n’importe quel paramètre ou membre réfléchi, ou ajouter de nouvelles propriétés à un type réfléchi.

Par exemple, supposons que votre code suit la convention d’application d’un attribut particulier aux méthodes de fabrique, mais que vous êtes maintenant tenu d’utiliser du code tiers qui n’a pas d’attributs. Vous pouvez utiliser CustomReflectionContext pour spécifier une règle pour identifier les objets qui doivent avoir des attributs et pour fournir ces attributs lorsqu’ils sont consultés à partir de votre code.

Pour une utilisation CustomReflectionContext efficace, 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 de supposer que tous les objets réfléchis sont associés au contexte de réflexion du runtime. De nombreuses méthodes de réflexion dans le .NET Framework fournissent un ReflectionContext paramètre à cet effet.

Pour modifier les attributs appliqués à un paramètre ou à un membre réfléchi, remplacez la GetCustomAttributes(ParameterInfo, IEnumerable<Object>) méthode ou GetCustomAttributes(MemberInfo, IEnumerable<Object>) . Ces méthodes prennent l’objet réfléchi et la liste d’attributs sous son contexte de réflexion actuel, et retournent la liste des attributs qu’il doit avoir sous le contexte de réflexion personnalisé.

Avertissement

CustomReflectionContextles méthodes ne doivent pas accéder directement à la liste des attributs d’un objet ou d’une méthode répercutée en appelant la GetCustomAttributes méthode sur le instance fourni MemberInfo ou ParameterInfo le instance, mais doivent utiliser la declaredAttributes liste, qui est passée en tant que paramètre aux surcharges de méthodeGetCustomAttributes.

Pour ajouter des propriétés à un type réfléchi, remplacez la AddProperties méthode . La méthode accepte un paramètre qui spécifie le type reflété et retourne une liste de propriétés supplémentaires. Vous devez utiliser la CreateProperty méthode pour créer des objets de propriété à retourner. Vous pouvez spécifier des délégués lors de la création de la propriété qui servira d’accesseur de propriété, et vous pouvez omettre l’un des accesseurs pour créer une propriété en lecture seule ou en écriture seule. Notez que ces propriétés factices n’ont pas de métadonnées ni de support CIL (Common Intermediate Language).

Avertissement

Soyez prudent quant à l’égalité entre les objets réfléchis lorsque vous travaillez avec des contextes de réflexion, car les objets peuvent représenter le même objet réfléchi dans plusieurs contextes. Vous pouvez utiliser la méthode pour obtenir la MapType version d’un contexte de réflexion particulier d’un objet réfléchi.

Avertissement

Un CustomReflectionContext objet modifie les attributs retournés par un objet de réflexion particulier, tels que ceux obtenus par la GetCustomAttributes méthode . Elle ne modifie pas les données d’attribut personnalisées retournées par la GetCustomAttributesData méthode, et ces deux listes ne correspondent pas lorsque vous utilisez un contexte de réflexion personnalisé.

Constructeurs

CustomReflectionContext()

Initialise une nouvelle instance de la classe CustomReflectionContext.

CustomReflectionContext(ReflectionContext)

Initialise une nouvelle instance de la classe CustomReflectionContext avec le contexte de réflexion spécifié en tant que base.

Méthodes

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.

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).

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.

Equals(Object)

Détermine si l'objet spécifié est égal à l'objet actuel.

(Hérité de 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.

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.

GetHashCode()

Fait office de fonction de hachage par défaut.

(Hérité de Object)
GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
GetTypeForObject(Object)

Obtient la représentation du type de l'objet spécifié dans ce contexte de réflexion.

(Hérité de ReflectionContext)
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.

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.

MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
ToString()

Retourne une chaîne qui représente l'objet actuel.

(Hérité de Object)

S’applique à