Accès dynamique aux attributs de classe au moment de l'exécution
Dans la programmation orientée objet, les attributs fournissent des métadonnées supplémentaires pour les classes et leurs membres. La récupération des valeurs de propriété au moment de l'exécution est utile pour accéder à des informations spécifiques à la classe ou à un comportement personnalisé. Cet article explore un moyen de lire les valeurs de propriété attribuées à une classe au moment de l'exécution.
Supposons que nous devions obtenir la propriété "DomainName" de la classe "MyClass". Cet attribut est de type « DomainNameAttribute » et a la valeur « MyTable ». Le but est de créer une méthode générique qui lit dynamiquement cette propriété et renvoie sa valeur.
Pour cela, nous pouvons exploiter la fonctionnalité de réflexion .NET :
<code class="language-csharp">public string GetDomainName<T>() { var dnAttribute = typeof(T).GetCustomAttributes( typeof(DomainNameAttribute), true ).FirstOrDefault() as DomainNameAttribute; if (dnAttribute != null) { return dnAttribute.Name; } return null; }</code>
Dans ce code, nous utilisons la méthode "GetCustomAttributes" pour récupérer tous les attributs de type "DomainNameAttribute" du type spécifié. Nous convertissons ensuite le premier (et généralement le seul) attribut en type "DomainNameAttribute". Si la propriété existe, sa propriété « Nom » est renvoyée. Sinon, renvoie null.
En utilisant cette méthode, nous pouvons récupérer dynamiquement la valeur de la propriété "DomainName" au moment de l'exécution :
<code class="language-csharp">// 这应该返回 "MyTable" String DomainNameValue = GetDomainName<MyClass>();</code>
Pour généraliser cette fonctionnalité à n'importe quelle propriété, nous pouvons créer une méthode d'extension :
<code class="language-csharp">public static class AttributeExtensions { public static TValue GetAttributeValue<TAttribute, TValue>( this Type type, Func<TAttribute, TValue> valueSelector) where TAttribute : Attribute { var att = type.GetCustomAttributes( typeof(TAttribute), true ).FirstOrDefault() as TAttribute; if (att != null) { return valueSelector(att); } return default(TValue); } }</code>
Comment l'utiliser :
<code class="language-csharp">string name = typeof(MyClass) .GetAttributeValue((DomainNameAttribute dna) => dna.Name);</code>
Cette méthode d'extension généralisée offre la flexibilité d'accéder à n'importe quelle propriété associée au type, ce qui en fait un outil polyvalent pour inspecter les propriétés de classe au moment de l'exécution.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!