Menambah sifat secara dinamik semasa runtime ialah keperluan biasa dalam pelbagai senario pengaturcaraan. Walaupun pendekatan seperti menggunakan Kamus atau Koleksi boleh mencukupi dalam situasi tertentu, pendekatan tersebut mungkin tidak sesuai untuk semua kes penggunaan. Mari kita terokai penyelesaian alternatif yang memanfaatkan ExpandoObject.
ExpandoObject ialah kelas terbina dalam .NET yang membolehkan anda menambah dan mengalih keluar ahli secara dinamik pada masa jalan, membolehkan tugasan dan mendapatkan semula nilai melalui sintaks titik standard. Pendekatan ini menyediakan cara yang mudah untuk mencipta objek dinamik dengan sifat yang ditentukan dengan cepat.
Untuk menggunakan ExpandoObject, anda hanya boleh mencipta tika baharu dan menetapkan sifat seperti yang diperlukan:
dynamic dynObject = new ExpandoObject(); dynObject.SomeDynamicProperty = "Hello!";
Jika anda mempunyai keperluan khusus untuk tingkah laku objek dinamik anda, anda boleh melanjutkan DynamicObject kelas dan melaksanakan logik tersuai untuk mengendalikan akses dan pengubahsuaian ahli. Berikut ialah contoh:
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) { return _properties.TryGetValue(binder.Name, out result); } public override bool TrySetMember(SetMemberBinder binder, object value) { _properties[binder.Name] = value; return true; } }
Dengan objek dinamik tersuai ini, anda boleh mencipta objek dinamik dengan sifat dan mengubah suainya secara dinamik semasa masa jalan:
var dyn = GetDynamicObject(new Dictionary<string, object>() { { "prop1", 12 } }); Console.WriteLine(dyn.prop1); dyn.prop1 = 150;
Sementara menggunakan DynamicObject menyediakan fleksibiliti dan kemudahan penggunaan, ia juga memperkenalkan beberapa potensi kelemahan:
Oleh itu, adalah penting untuk mengimbangi faedah manipulasi objek dinamik dengan pertimbangan ini apabila memilih pendekatan yang paling sesuai untuk keperluan pembangunan anda.
Atas ialah kandungan terperinci Bagaimana untuk Menambah Sifat C# secara Dinamik pada Runtime Menggunakan ExpandoObject dan DynamicObject?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!