Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Dapatkan Secara Dinamik Nilai Atribut daripada Kelas pada Runtime?
Artikel ini memperkenalkan kaedah umum untuk mengakses dan mengekstrak nilai atribut kelas secara dinamik.
Tentukan kaedah generik yang menerima parameter jenis:
<code class="language-csharp">public string GetDomainName<T>()</code>
Kaedah dalaman:
Gunakan typeof(T).GetCustomAttributes
untuk mendapatkan semula sifat tersuai:
<code class="language-csharp"> var dnAttribute = typeof(T).GetCustomAttributes( typeof(DomainNameAttribute), true ).FirstOrDefault() as DomainNameAttribute;</code>
Jika atribut wujud, kembalikan nilainya:
<code class="language-csharp"> if (dnAttribute != null) { return dnAttribute.Name; }</code>
Jika tidak, kembalikan null:
<code class="language-csharp"> return null;</code>
Untuk kebolehgunaan yang lebih luas, umumkan kaedah ini untuk mengendalikan sebarang atribut:
<code class="language-csharp">public static class AttributeExtensions { public static TValue GetAttributeValue<TAttribute, TValue>( this Type type, Func<TAttribute, TValue> valueSelector) where TAttribute : Attribute }</code>
Kaedah sambungan dalaman:
Dapatkan semula atribut tersuai:
<code class="language-csharp"> var att = type.GetCustomAttributes( typeof(TAttribute), true ).FirstOrDefault() as TAttribute;</code>
Jika atribut wujud, gunakan valueSelector
yang disediakan untuk mengekstrak nilai yang diperlukan:
<code class="language-csharp"> if (att != null) { return valueSelector(att); }</code>
Jika tidak, kembalikan nilai lalai jenis:
<code class="language-csharp"> return default(TValue);</code>
MyClass
DomainName
: <code class="language-csharp">string name = typeof(MyClass).GetDomainName<MyClass>();</code>
MyClass
menggunakan kaedah sambungan: <code class="language-csharp">string name = typeof(MyClass) .GetAttributeValue<DomainNameAttribute, string>((DomainNameAttribute dna) => dna.Name);</code>
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Dapatkan Secara Dinamik Nilai Atribut daripada Kelas pada Runtime?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!