Maison >développement back-end >C++ >Comment puis-je récupérer dynamiquement les valeurs d'attribut d'une classe au moment de l'exécution ?

Comment puis-je récupérer dynamiquement les valeurs d'attribut d'une classe au moment de l'exécution ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-12 06:04:12948parcourir

How Can I Dynamically Retrieve Attribute Values from a Class at Runtime?

Récupérer les propriétés au moment de l'exécution

Cet article présente une méthode générale pour accéder et extraire dynamiquement les valeurs d'attribut d'une classe.

Utiliser des méthodes dédiées

Définissez une méthode générique qui accepte les paramètres de type :

<code class="language-csharp">public string GetDomainName<T>()</code>

Méthode interne :

  • Utilisez typeof(T).GetCustomAttributes pour récupérer des propriétés personnalisées :

    <code class="language-csharp">  var dnAttribute = typeof(T).GetCustomAttributes(
        typeof(DomainNameAttribute), true
      ).FirstOrDefault() as DomainNameAttribute;</code>
  • Si l'attribut existe, retournez sa valeur :

    <code class="language-csharp">  if (dnAttribute != null)
      {
        return dnAttribute.Name;
      }</code>
  • Sinon, renvoie null :

    <code class="language-csharp">  return null;</code>

Méthodes d'extension des utilitaires

Pour une applicabilité plus large, généralisez cette méthode pour gérer n'importe quel attribut :

<code class="language-csharp">public static class AttributeExtensions
{
    public static TValue GetAttributeValue<TAttribute, TValue>(
        this Type type, 
        Func<TAttribute, TValue> valueSelector) 
        where TAttribute : Attribute
}</code>

Méthode d'extension interne :

  • Récupérer les attributs personnalisés :

    <code class="language-csharp">  var att = type.GetCustomAttributes(
        typeof(TAttribute), true
      ).FirstOrDefault() as TAttribute;</code>
  • Si l'attribut existe, utilisez le valueSelector fourni pour extraire la valeur requise :

    <code class="language-csharp">  if (att != null)
      {
        return valueSelector(att);
      }</code>
  • Sinon, renvoie la valeur par défaut du type :

    <code class="language-csharp">  return default(TValue);</code>

Exemples d'utilisation

  • Récupérer l'attribut MyClass de DomainName :
<code class="language-csharp">string name = typeof(MyClass).GetDomainName<MyClass>();</code>
  • Récupérez n'importe quelle valeur d'attribut de MyClass à l'aide des méthodes d'extension :
<code class="language-csharp">string name = typeof(MyClass)
    .GetAttributeValue<DomainNameAttribute, string>((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