Heim > Backend-Entwicklung > C++ > Wie kann ich Klassenattribute in C# dynamisch abrufen?

Wie kann ich Klassenattribute in C# dynamisch abrufen?

Linda Hamilton
Freigeben: 2025-01-12 08:28:11
Original
116 Leute haben es durchsucht

How Can I Dynamically Retrieve Class Attributes in C#?

Klassenattribute dynamisch abrufen

Bei der objektorientierten Programmierung sind Attribute Metadaten, die an eine Klasse angehängt sind und zusätzliche Informationen über den Code selbst hinaus bereitstellen. Wenn Sie Eigenschaften zur Laufzeit dynamisch lesen müssen, erfahren Sie hier, wie Sie das tun.

Beispiel für Domain-Attribute

Betrachten Sie den folgenden Codeausschnitt, der das Attribut DomainName enthält:

<code class="language-csharp">[DomainName("MyTable")]
public class MyClass : DomainBase
{ }</code>
Nach dem Login kopieren

Generische Methoden zum Lesen von Attributen

Unser Ziel ist es, eine generische Methode zu erstellen, die die DomainName-Eigenschaft einer bestimmten Klasse liest und ihren Wert zurückgibt:

<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>
Nach dem Login kopieren

Diese Methode kann folgendermaßen verwendet werden:

<code class="language-csharp">string domainNameValue = GetDomainName<MyClass>(); // 返回 "MyTable"</code>
Nach dem Login kopieren

Allgemeine Attributlesung

Mit der Klasse AttributeExtensions kann die Funktionalität zum Lesen von Eigenschaften so verallgemeinert werden, dass sie mit jedem Eigenschaftstyp funktioniert:

<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>
Nach dem Login kopieren

Anwendung:

<code class="language-csharp">string name = typeof(MyClass)
    .GetAttributeValue((DomainNameAttribute dna) => dna.Name);</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich Klassenattribute in C# dynamisch abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage