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

Wie kann ich Klassenattribute in C# dynamisch abrufen?

Linda Hamilton
Linda HamiltonOriginal
2025-01-12 08:28:11157Durchsuche

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>

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>

Diese Methode kann folgendermaßen verwendet werden:

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

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>

Anwendung:

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

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!

Stellungnahme:
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