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
Libérer: 2025-01-12 08:28:11
original
116 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

Cette méthode peut être utilisée comme ceci :

<code class="language-csharp">string domainNameValue = GetDomainName<MyClass>(); // 返回 "MyTable"</code>
Copier après la connexion

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>
Copier après la connexion

Comment utiliser :

<code class="language-csharp">string name = typeof(MyClass)
    .GetAttributeValue((DomainNameAttribute dna) => dna.Name);</code>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal