Exporter (0) Imprimer
Développer tout
Cet article a fait l'objet d'une traduction automatique. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. Informations supplémentaires.
Traduction
Source

CustomReflectionContext, classe

.NET Framework 4.5

Représente un contexte de réflexion personnalisable.

Espace de noms :  System.Reflection.Context
Assembly :  System.Reflection.Context (dans System.Reflection.Context.dll)

public abstract class CustomReflectionContext : ReflectionContext

Le type CustomReflectionContext expose les membres suivants.

  NomDescription
Méthode protégéePris en charge dans .NET pour les applications du Windows StoreCustomReflectionContext()Initialise une nouvelle instance de la classe CustomReflectionContext.
Méthode protégéePris en charge dans .NET pour les applications du Windows StoreCustomReflectionContext(ReflectionContext)Initialise une nouvelle instance de la classe CustomReflectionContext avec le contexte de réflexion spécifié en tant que base.
Début

  NomDescription
Méthode protégéePris en charge dans .NET pour les applications du Windows StoreAddPropertiesEn 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.
Méthode protégéePris en charge dans .NET pour les applications du Windows StoreCreateProperty(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.
Méthode protégéePris en charge dans .NET pour les applications du Windows StoreCreateProperty(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, à l'aide des attributs personnalisés spécifiés.
Méthode publiquePris en charge dans .NET pour les applications du Windows StoreEquals(Object)Détermine si l'objet spécifié est identique à l'objet actuel. (Hérité de Object.)
Méthode protégéePris en charge dans .NET pour les applications du Windows StoreFinalize Autorise un objet à tenter de libérer des ressources et d'exécuter d'autres opérations de nettoyage avant qu'il ne soit récupéré par l'opération garbage collection. (Hérité de Object.)
Méthode protégéePris en charge dans .NET pour les applications du Windows StoreGetCustomAttributes(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.
Méthode protégéePris en charge dans .NET pour les applications du Windows StoreGetCustomAttributes(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.
Méthode publiquePris en charge dans .NET pour les applications du Windows StoreGetHashCodeSert de fonction de hachage par défaut. (Hérité de Object.)
Méthode publiquePris en charge dans .NET pour les applications du Windows StoreGetTypeObtient le Type de l'instance actuelle. (Hérité de Object.)
Méthode publiquePris en charge dans .NET pour les applications du Windows StoreGetTypeForObjectObtient la représentation du type de l'objet spécifié dans ce contexte de réflexion. (Hérité de ReflectionContext.)
Méthode publiquePris en charge dans .NET pour les applications du Windows StoreMapAssemblyObtient la représentation, dans ce contexte de réflexion, d'un assembly représenté par un objet d'un autre contexte de réflexion. (Substitue ReflectionContext.MapAssembly(Assembly).)
Méthode publiquePris en charge dans .NET pour les applications du Windows StoreMapTypeObtient la représentation, dans ce contexte de réflexion, d'un type représenté par un objet d'un autre contexte de réflexion. (Substitue ReflectionContext.MapType(TypeInfo).)
Méthode protégéePris en charge dans .NET pour les applications du Windows StoreMemberwiseCloneCrée une copie superficielle de l'objet Object actuel. (Hérité de Object.)
Méthode publiquePris en charge dans .NET pour les applications du Windows StoreToStringRetourne une chaîne qui représente l'objet actif. (Hérité de Object.)
Début

CustomReflectionContext permet d'ajouter ou de supprimer les attributs personnalisés et des objets de réflexion, ou d'ajouter des propriétés fictifs à ces objets, sans à implémenter le modèle complet de réflexion. La valeur par défaut CustomReflectionContext inclut simplement des objets de réflexion sans apporter de modification, mais sous-classement et en remplaçant les méthodes appropriées, vous pouvez ajouter, supprimer, ou modifier les attributs qui s'appliquent à un paramètre ou membre mis en miroir, ou ajouter de nouvelles propriétés à un type mise en miroir.

Par exemple, supposons que votre code suivant la convention d'appliquer un attribut particulier les méthodes de fabrique, mais sont maintenant obligatoire pour utiliser le code tiers qui manque des attributs. Vous pouvez utiliser CustomReflectionContext pour spécifier une règle pour identifier les objets qui doivent avoir les attributs et fournir les objets et attributs lorsqu'ils sont affichés dans votre code.

Pour utiliser CustomReflectionContext efficacement, le code qui utilise les objets apparaissent doit prendre en charge la notion de spécifier un contexte de réflexion, au lieu de supposer que tous les objets apparaissent sont associés au contexte d'exécution de réflexion. De nombreuses méthodes de réflexion du .NET Framework fournit un paramètre d'ReflectionContext à cet effet.

Pour modifier les attributs qui sont appliqués à un paramètre ou un membre mis en miroir, remplacez l'GetCustomAttributes(ParameterInfo, IEnumerable<Object>) ou la méthode d'GetCustomAttributes(MemberInfo, IEnumerable<Object>). Ces méthodes utilisent l'objet mis en miroir et la liste des attributs dans son contexte actuel de réflexion, et retournent la liste d'attributs qu'elle doit avoir le contexte personnalisé de réflexion.

Mise en gardeAttention

les méthodes d'CustomReflectionContext ne doivent pas accéder à la liste des attributs d'un objet ou une méthode en miroir directement en appelant la méthode de GetCustomAttributes sur MemberInfo ou l'instance fourni de ParameterInfo, mais doivent plutôt utiliser la liste des declaredAttributes, laquelle est transmise comme paramètre à des surcharges de la méthode d'GetCustomAttributes.

Pour ajouter des propriétés sur un type mis en miroir, substituez la méthode de AddProperties. La méthode accepte un paramètre qui spécifie le type mis en miroir, puis retourne une liste de propriétés supplémentaires. Vous devez utiliser la méthode de CreateProperty pour créer des objets de propriété à retourner. Vous pouvez spécifier les 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. Notez que ces propriétés fictifs n'ont pas de métadonnées ou en commun de langage (CIL) intermédiaire.

Mise en gardeAttention

Soyez prudent sur l'égalité entre les objets apparaissent lorsque vous utilisez des contextes de réflexion, car les objets peuvent représenter le même objet mis en miroir dans plusieurs contextes. Vous pouvez utiliser la méthode de MapType pour obtenir la version d'un contexte spécifique de réflexion d'un objet mis en miroir.

Mise en gardeAttention

Objet d'CustomReflectionContext modifie ses attributs renvoyés par un objet particulier de réflexion, comme ceux obtenus par la méthode de GetCustomAttributes. Elle ne modifie pas les données personnalisées d'attribut retournées par la méthode de GetCustomAttributesData, et ces deux pools ne ne correspondent pas lorsque vous utilisez un contexte personnalisé de réflexion.

L'exemple suivant montre comment utiliser la sous-classe CustomReflectionContext ajouter un attribut personnalisé à tous les membres d'un type donné dont le nom commence par «  ». Pour exécuter ce code, collez-le dans un projet vide de la console, et assurez-vous d'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();
    }
}


.NET Framework

Pris en charge dans : 4.5.2, 4.5.1, 4.5

.NET pour les applications du Windows Store

Pris en charge dans : 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 (rôle principal du serveur non pris en charge), Windows Server 2008 R2 (rôle principal du serveur pris en charge avec SP1 ou version ultérieure ; Itanium non pris en charge)

Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.

Tous les membres static (Shared en Visual Basic) publics de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.

Ajouts de la communauté

AJOUTER
Afficher:
© 2014 Microsoft