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!