Maison > développement back-end > C++ > Comment puis-je accéder dynamiquement aux attributs de classe en C# au moment de l'exécution ?

Comment puis-je accéder dynamiquement aux attributs de classe en C# au moment de l'exécution ?

Patricia Arquette
Libérer: 2025-01-12 07:36:43
original
825 Les gens l'ont consulté

How Can I Dynamically Access Class Attributes in C# at Runtime?

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

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

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

Comment l'utiliser :

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

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!

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