Maison >développement back-end >C++ >Comment puis-je récupérer dynamiquement les attributs de classe en C# ?

Comment puis-je récupérer dynamiquement les attributs de classe en C# ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-12 08:28:11157parcourir

How Can I Dynamically Retrieve Class Attributes in C#?

Obtenir dynamiquement les attributs de classe

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn