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
Lepaskan: 2025-01-12 06:04:12
asal
896 orang telah melayarinya

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>
Salin selepas log masuk

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>
    Salin selepas log masuk
  • Jika atribut wujud, kembalikan nilainya:

    <code class="language-csharp">  if (dnAttribute != null)
      {
        return dnAttribute.Name;
      }</code>
    Salin selepas log masuk
  • Jika tidak, kembalikan null:

    <code class="language-csharp">  return null;</code>
    Salin selepas log masuk

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>
Salin selepas log masuk

Kaedah sambungan dalaman:

  • Dapatkan semula atribut tersuai:

    <code class="language-csharp">  var att = type.GetCustomAttributes(
        typeof(TAttribute), true
      ).FirstOrDefault() as TAttribute;</code>
    Salin selepas log masuk
  • Jika atribut wujud, gunakan valueSelector yang disediakan untuk mengekstrak nilai yang diperlukan:

    <code class="language-csharp">  if (att != null)
      {
        return valueSelector(att);
      }</code>
    Salin selepas log masuk
  • Jika tidak, kembalikan nilai lalai jenis:

    <code class="language-csharp">  return default(TValue);</code>
    Salin selepas log masuk

Contoh penggunaan

  • Dapatkan semula atribut MyClass DomainName:
<code class="language-csharp">string name = typeof(MyClass).GetDomainName<MyClass>();</code>
Salin selepas log masuk
  • Dapatkan sebarang nilai atribut MyClass menggunakan kaedah sambungan:
<code class="language-csharp">string name = typeof(MyClass)
    .GetAttributeValue<DomainNameAttribute, string>((DomainNameAttribute dna) => dna.Name);</code>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan