Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Dapatkan Secara Dinamik Nilai Atribut daripada Kelas pada Runtime?

Bagaimanakah Saya Boleh Dapatkan Secara Dinamik Nilai Atribut daripada Kelas pada Runtime?

Linda Hamilton
Linda Hamiltonasal
2025-01-12 06:04:12966semak imbas

How Can I Dynamically Retrieve Attribute Values from a Class at Runtime?

Dapatkan semula sifat pada masa jalan

Artikel ini memperkenalkan kaedah umum untuk mengakses dan mengekstrak nilai atribut kelas secara dinamik.

Gunakan kaedah khusus

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>

Kaedah sambungan utiliti

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>

Contoh penggunaan

  • Dapatkan semula atribut MyClass DomainName:
<code class="language-csharp">string name = typeof(MyClass).GetDomainName<MyClass>();</code>
  • Dapatkan sebarang nilai atribut 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn