Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mengakses Atribut Kelas Secara Dinamik dalam C# pada Runtime?

Bagaimanakah Saya Boleh Mengakses Atribut Kelas Secara Dinamik dalam C# pada Runtime?

Patricia Arquette
Lepaskan: 2025-01-12 07:36:43
asal
826 orang telah melayarinya

How Can I Dynamically Access Class Attributes in C# at Runtime?

Akses dinamik kepada atribut kelas pada masa jalan

Dalam pengaturcaraan berorientasikan objek, atribut menyediakan metadata tambahan untuk kelas dan ahlinya. Mendapatkan semula nilai harta pada masa jalan adalah berguna untuk mengakses maklumat khusus kelas atau tingkah laku tersuai. Artikel ini meneroka cara untuk membaca nilai sifat yang diberikan kepada kelas semasa masa jalan.

Andaikan kita perlu mendapatkan sifat "DomainName" daripada kelas "MyClass". Atribut ini adalah jenis "DomainNameAttribute" dan mempunyai nilai "MyTable". Matlamatnya ialah untuk mencipta kaedah generik yang membaca sifat ini secara dinamik dan mengembalikan nilainya.

Untuk ini kita boleh memanfaatkan ciri pantulan .NET:

<code class="language-csharp">public string GetDomainName<T>()
{
    var dnAttribute = typeof(T).GetCustomAttributes(
        typeof(DomainNameAttribute), true
    ).FirstOrDefault() as DomainNameAttribute;
    if (dnAttribute != null)
    {
        return dnAttribute.Name;
    }
    return null;
}</code>
Salin selepas log masuk

Dalam kod ini, kami menggunakan kaedah "GetCustomAttributes" untuk mendapatkan semula semua atribut jenis "DomainNameAttribute" daripada jenis yang ditentukan. Kami kemudian menghantar atribut pertama (dan biasanya sahaja) untuk menaip "DomainNameAttribute". Jika harta itu wujud, sifat "Nama"nya dikembalikan. Jika tidak, kembalikan null.

Menggunakan kaedah ini, kami boleh mendapatkan semula nilai sifat "DomainName" secara dinamik pada masa jalan:

<code class="language-csharp">// 这应该返回 "MyTable"
String DomainNameValue = GetDomainName<MyClass>();</code>
Salin selepas log masuk

Untuk menyamaratakan fungsi ini kepada mana-mana harta, kami boleh mencipta kaedah sambungan:

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

Cara menggunakannya:

<code class="language-csharp">string name = typeof(MyClass)
    .GetAttributeValue((DomainNameAttribute dna) => dna.Name);</code>
Salin selepas log masuk

Kaedah pelanjutan umum ini memberikan fleksibiliti untuk mengakses mana-mana harta yang dikaitkan dengan jenis, menjadikannya alat serba boleh untuk memeriksa sifat kelas pada masa jalan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengakses Atribut Kelas Secara Dinamik dalam C# 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