物件導向程式設計中,屬性是附加到類別的元數據,提供了超出程式碼本身的額外資訊。如果需要在運行時動態讀取屬性,以下是如何實現的。
領域屬性範例
考慮以下包含DomainName
屬性的程式碼片段:
<code class="language-csharp">[DomainName("MyTable")] public class MyClass : DomainBase { }</code>
用於屬性讀取的泛型方法
我們的目標是建立一個泛型方法,讀取給定類別上的DomainName
屬性並傳回其值:
<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>
此方法可以這樣使用:
<code class="language-csharp">string domainNameValue = GetDomainName<MyClass>(); // 返回 "MyTable"</code>
通用屬性讀取
使用AttributeExtensions
類,可以將屬性讀取功能泛化,使其能夠與任何屬性類型一起工作:
<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>
使用方法:
<code class="language-csharp">string name = typeof(MyClass) .GetAttributeValue((DomainNameAttribute dna) => dna.Name);</code>
以上是如何在 C# 中動態檢索類別屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!