Heim >Backend-Entwicklung >C++ >Wie kann ich Klassenattribute zur Laufzeit in C# lesen?
Dynamischer Zugriff auf Klassenattribute in C#
Der Zugriff auf Klassenattribute zur Laufzeit ist eine leistungsstarke Technik zum dynamischen Abrufen von Metadaten oder Konfigurationsinformationen. Dies kann mithilfe der Reflexionsfunktionen von C# erreicht werden.
Abrufen eines bestimmten Attributs (DomainNameAttribute):
Eine generische Methode GetDomainName<T>
vereinfacht das Abrufen eines DomainNameAttribute
aus jeder Klasse:
<code class="language-csharp">public string GetDomainName<T>() { var dnAttribute = typeof(T).GetCustomAttributes(typeof(DomainNameAttribute), true) .FirstOrDefault() as DomainNameAttribute; return dnAttribute?.Name; }</code>
Anwendungsbeispiel:
<code class="language-csharp">// Returns "MyTable" (assuming myclass has the attribute) string domainName = GetDomainName<myclass>();</code>
Ein allgemeinerer Ansatz für den Attributzugriff:
Für eine breitere Anwendbarkeit ermöglicht eine allgemeinere Erweiterungsmethode das Abrufen jedes Attributtyps und seiner spezifischen Eigenschaft:
<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 attribute = type.GetCustomAttributes(typeof(TAttribute), true) .FirstOrDefault() as TAttribute; return attribute != null ? valueSelector(attribute) : default(TValue); } }</code>
Anwendungsbeispiel:
<code class="language-csharp">string name = typeof(MyClass).GetAttributeValue((DomainNameAttribute dna) => dna.Name);</code>
Diese Methode verwendet den Attributtyp und einen Lambda-Ausdruck, um den gewünschten Eigenschaftswert aus der Attributinstanz auszuwählen. Dies bietet Flexibilität für den Zugriff auf verschiedene Attributeigenschaften.
Das obige ist der detaillierte Inhalt vonWie kann ich Klassenattribute zur Laufzeit in C# lesen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!