En programmation orientée objet, les attributs sont des métadonnées attachées à une classe, fournissant des informations supplémentaires au-delà du code lui-même. Si vous avez besoin de lire dynamiquement les propriétés au moment de l'exécution, voici comment procéder.
Exemple d'attributs de domaine
Considérez l'extrait de code suivant contenant l'attribut DomainName
:
<code class="language-csharp">[DomainName("MyTable")] public class MyClass : DomainBase { }</code>
Méthodes génériques de lecture des attributs
Notre objectif est de créer une méthode générique qui lit la propriété DomainName
sur une classe donnée et renvoie sa valeur :
<code class="language-csharp">string GetDomainName<T>() { var dnAttribute = typeof(T).GetCustomAttributes( typeof(DomainNameAttribute), true ).FirstOrDefault() as DomainNameAttribute; if (dnAttribute != null) { return dnAttribute.Name; } return null; }</code>
Cette méthode peut être utilisée comme ceci :
<code class="language-csharp">string domainNameValue = GetDomainName<MyClass>(); // 返回 "MyTable"</code>
Lecture des attributs communs
Grâce à la classe AttributeExtensions
, la fonctionnalité de lecture de propriété peut être généralisée pour fonctionner avec n'importe quel type de propriété :
<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 utiliser :
<code class="language-csharp">string name = typeof(MyClass) .GetAttributeValue((DomainNameAttribute dna) => dna.Name);</code>
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!