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
Libérer: 2025-01-12 06:04:12
original
896 Les gens l'ont consulté

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

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>
    Copier après la connexion
  • Si l'attribut existe, retournez sa valeur :

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

    <code class="language-csharp">  return null;</code>
    Copier après la connexion

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

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>
    Copier après la connexion
  • Si l'attribut existe, utilisez le valueSelector fourni pour extraire la valeur requise :

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

    <code class="language-csharp">  return default(TValue);</code>
    Copier après la connexion

Exemples d'utilisation

  • Récupérer l'attribut MyClass de DomainName :
<code class="language-csharp">string name = typeof(MyClass).GetDomainName<MyClass>();</code>
Copier après la connexion
  • 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>
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