Heim > Backend-Entwicklung > C++ > Wie kann ich zur Laufzeit dynamisch auf Klassenattribute in C# zugreifen?

Wie kann ich zur Laufzeit dynamisch auf Klassenattribute in C# zugreifen?

Patricia Arquette
Freigeben: 2025-01-12 07:36:43
Original
825 Leute haben es durchsucht

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

Dynamischer Zugriff auf Klassenattribute zur Laufzeit

Bei der objektorientierten Programmierung stellen Attribute zusätzliche Metadaten für Klassen und ihre Mitglieder bereit. Das Abrufen von Eigenschaftswerten zur Laufzeit ist nützlich, um auf klassenspezifische Informationen oder benutzerdefiniertes Verhalten zuzugreifen. In diesem Artikel wird eine Möglichkeit untersucht, Eigenschaftswerte zu lesen, die einer Klasse zur Laufzeit zugewiesen sind.

Angenommen, wir müssen die Eigenschaft „DomainName“ aus der Klasse „MyClass“ abrufen. Dieses Attribut ist vom Typ „DomainNameAttribute“ und hat den Wert „MyTable“. Das Ziel besteht darin, eine generische Methode zu erstellen, die diese Eigenschaft dynamisch liest und ihren Wert zurückgibt.

Hierfür können wir die .NET-Reflexionsfunktion nutzen:

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

In diesem Code verwenden wir die Methode „GetCustomAttributes“, um alle Attribute des Typs „DomainNameAttribute“ vom angegebenen Typ abzurufen. Anschließend wandeln wir das erste (und normalerweise einzige) Attribut in den Typ „DomainNameAttribute“ um. Wenn die Eigenschaft vorhanden ist, wird ihre Eigenschaft „Name“ zurückgegeben. Andernfalls geben Sie null zurück.

Mit dieser Methode können wir den Eigenschaftswert „DomainName“ zur Laufzeit dynamisch abrufen:

<code class="language-csharp">// 这应该返回 "MyTable"
String DomainNameValue = GetDomainName<MyClass>();</code>
Nach dem Login kopieren

Um diese Funktionalität auf jede Eigenschaft zu verallgemeinern, können wir eine Erweiterungsmethode erstellen:

<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

So verwenden Sie es:

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

Diese verallgemeinerte Erweiterungsmethode bietet die Flexibilität, auf jede mit dem Typ verknüpfte Eigenschaft zuzugreifen, was sie zu einem vielseitigen Werkzeug zum Überprüfen von Klasseneigenschaften zur Laufzeit macht.

Das obige ist der detaillierte Inhalt vonWie kann ich zur Laufzeit dynamisch auf Klassenattribute in C# zugreifen?. 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