CustomReflectionContext Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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
- Dérivé
Exemples
L’exemple suivant montre comment sous-classer CustomReflectionContext pour ajouter un attribut personnalisé à tous les membres d’un type donné dont les noms commencent par « 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.
//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 permet d’ajouter ou de supprimer des attributs personnalisés des objets de réflexion, ou d’ajouter des propriétés factices à ces objets, sans réinscrire 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-classe et en substituant 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 vous êtes maintenant obligé d’utiliser du code tiers qui n’a pas d’attributs. Vous pouvez utiliser CustomReflectionContext pour spécifier une règle permettant d’identifier les objets qui doivent avoir des attributs et de fournir les objets avec ces attributs lorsqu’ils sont consultés à partir de votre 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 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 .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 méthode GetCustomAttributes(ParameterInfo, IEnumerable<Object>) ou GetCustomAttributes(MemberInfo, IEnumerable<Object>). Ces méthodes prennent l’objet réfléchi et la liste des attributs dans le contexte de réflexion actuel, puis retournent la liste des attributs qu'il doit avoir dans le contexte de réflexion personnalisé.
Avertissement
CustomReflectionContextLes méthodes ne doivent pas accéder à la liste des attributs d’un objet ou d’une méthode réfléchie directement en appelant la méthode GetCustomAttributes sur l’instance MemberInfo ou ParameterInfo fournie, mais devraient plutôt utiliser la liste declaredAttributes, qui est passée en tant que paramètre aux surcharges de méthodes GetCustomAttributes.
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 réfléchi et retourne une liste de propriétés supplémentaires. Vous devez utiliser la méthode CreateProperty 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 sauvegarde 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 MapType méthode pour obtenir la version d’un contexte de réflexion spécifique 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
| Nom | Description |
|---|---|
| CustomReflectionContext() |
Initialise une nouvelle instance de la classe CustomReflectionContext. |
| CustomReflectionContext(ReflectionContext) |
Initialise une nouvelle instance de la CustomReflectionContext classe avec le contexte de réflexion spécifié en tant que base. |
Méthodes
| Nom | Description |
|---|---|
| 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>, IEnumerable<Attribute>, IEnumerable<Attribute>, IEnumerable<Attribute>) |
Crée un objet qui représente une propriété à ajouter à un type, à utiliser avec la AddProperties(Type) méthode et à l’aide des attributs personnalisés spécifiés. |
| 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 AddProperties(Type) méthode. |
| 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() |
Sert de fonction de hachage par défaut. (Hérité de Object) |
| GetType() |
Obtient la 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 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 d’un autre contexte de réflexion. |
| MemberwiseClone() |
Crée une copie superficielle du Objectactuel. (Hérité de Object) |
| ToString() |
Retourne une chaîne qui représente l’objet actuel. (Hérité de Object) |