Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Menambah Sifat C# secara Dinamik pada Runtime Tanpa Menggunakan Koleksi?

Bagaimana untuk Menambah Sifat C# secara Dinamik pada Runtime Tanpa Menggunakan Koleksi?

Barbara Streisand
Lepaskan: 2025-01-02 21:12:40
asal
398 orang telah melayarinya

How to Dynamically Add C# Properties at Runtime Without Using Collections?

Tambah Sifat C# Secara Dinamik pada Runtime Tanpa Menggunakan Koleksi

Pertimbangkan senario di mana anda perlu mencipta objek dinamik dengan sifat yang boleh ditambah secara dinamik pada masa jalan. Daripada menggunakan kamus atau koleksi parameter, anda boleh memanfaatkan kelas ExpandoObject.

ExpandoObject

ExpandoObject membenarkan anda menambah dan mengalih keluar ahli kejadiannya pada masa jalan, membolehkan keupayaan mengikat dinamik. Ia menyediakan cara mudah untuk memanipulasi sifat secara dinamik, seperti yang dilihat dalam contoh berikut:

dynamic dynObject = new ExpandoObject();
dynObject.SomeDynamicProperty = "Hello!";
Salin selepas log masuk

Objek Dinamik Tersuai

Membina pada pendekatan ExpandoObject, anda boleh mencipta objek dinamik tersuai yang menguruskan pengambilan semula dan penetapan sifat dinamik. Kod berikut menunjukkan konsep ini:

public static dynamic GetDynamicObject(Dictionary<string, object> properties)
{
    return new MyDynObject(properties);
}

public sealed class MyDynObject : DynamicObject
{
    private readonly Dictionary<string, object> _properties;

    public MyDynObject(Dictionary<string, object> properties)
    {
        _properties = properties;
    }

    public override IEnumerable<string> GetDynamicMemberNames()
    {
        return _properties.Keys;
    }

    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        if (_properties.ContainsKey(binder.Name))
        {
            result = _properties[binder.Name];
            return true;
        }
        else
        {
            result = null;
            return false;
        }
    }

    public override bool TrySetMember(SetMemberBinder binder, object value)
    {
        if (_properties.ContainsKey(binder.Name))
        {
            _properties[binder.Name] = value;
            return true;
        }
        else
        {
            return false;
        }
    }
}
Salin selepas log masuk

Dengan melaksanakan antara muka DynamicObject, anda mendapat kawalan penuh ke atas mekanisme akses ahli dinamik. Ini membolehkan anda melaksanakan peraturan dan gelagat tersuai untuk objek dinamik anda.

Penggunaan

Dengan objek dinamik tersuai anda tersedia, anda boleh menambah sifat dan mendapatkannya di masa jalan:

var dyn = GetDynamicObject(new Dictionary<string, object>
{
    { "prop1", 12 },
});

Console.WriteLine(dyn.prop1);
dyn.prop1 = 150;
Salin selepas log masuk

Nota:

Objek dinamik berkuasa tetapi mesti digunakan dengan berhati-hati. Pengkompil tidak boleh mengesahkan panggilan dinamik dan anda mungkin menghadapi ralat masa jalan jika anda tidak berhati-hati. Adalah penting untuk memahami mekanisme asas dan potensi isu sebelum menggunakannya dalam kod pengeluaran.

Atas ialah kandungan terperinci Bagaimana untuk Menambah Sifat C# secara Dinamik pada Runtime Tanpa Menggunakan Koleksi?. 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