Tambah Sifat Secara Dinamik pada Objek semasa Runtime: Penyelesaian Elegan menggunakan ExpandoObject
Apabila bekerja dengan objek dinamik, selalunya timbul keperluan untuk menambah sifat semasa runtime. Walaupun penyelesaian konvensional menggunakan Kamus atau Koleksi mungkin boleh dilaksanakan dalam beberapa kes, penyelesaian itu gagal dalam situasi tertentu. Artikel ini membentangkan pendekatan yang lebih fleksibel yang memanfaatkan kuasa ExpandoObject.
Mentakrifkan Sifat Dinamik dengan ExpandoObject
The ExpandoObject kelas membenarkan penciptaan objek yang sangat dinamik. Tidak seperti kelas statik, objek ini boleh mempunyai ahlinya ditambah, dialih keluar dan diubah suai semasa masa jalan. Ini menjadikannya amat berguna untuk senario di mana set sifat tidak diketahui terlebih dahulu.
Contoh Penambahan Harta Dinamik
Pertimbangkan coretan kod berikut:
dynamic dynObject = new ExpandoObject(); dynObject.SomeDynamicProperty = "Hello!"; dynObject.SomeDynamicAction = (msg) => Console.WriteLine(msg); dynObject.SomeDynamicAction(dynObject.SomeDynamicProperty);
Dalam contoh ini, objek dinamik bernama dynObject dicipta dan kemudian ahlinya, SomeDynamicProperty dan SomeDynamicAction, ditambah. Sifat dinamik objek membolehkan anda mengakses dan mengubah suai sifat dan tindakan ini menggunakan notasi titik standard.
Mencipta Objek Dinamik dengan Kamus Sifat
Penyelesaian yang dibentangkan memerlukan pendekatan yang sedikit berbeza. Daripada menambah sifat terus pada ExpandoObject, ia mencipta kelas pembalut yang berasal daripada DynamicObject. Dalam kelas ini, kamus sifat disediakan sebagai hujah pembina:
public sealed class MyDynObject : DynamicObject { private readonly Dictionary<string, object> _properties; }
Akses dan Pengurusan Ahli Dinamik
Untuk mengendalikan operasi dinamik, kelas mengatasi kaedah seperti GetDynamicMemberNames, TryGetMember, dan TrySetMember. Kaedah ini memberikan kawalan ke atas cara akses dan tetapan ahli dinamik berkelakuan. Dengan menggunakan kamus sifat yang disediakan, kaedah ini boleh mengendalikan akses dan pengubahsuaian sifat secara dinamik.
Penggunaan Objek Dinamik
Dengan tersuai ini DynamicObject kelas, anda boleh menggunakannya seperti berikut:
var dyn = GetDynamicObject(new Dictionary<string, object>() { { "prop1", 12 } }); Console.WriteLine(dyn.prop1); dyn.prop1 = 150;
Ringkasnya, memanfaatkan kuasa ExpandoObject atau mencipta kelas DynamicObject tersuai menyediakan cara yang serba boleh dan dinamik untuk mengurus sifat pada objek pada masa jalan. Teknik ini menawarkan fleksibiliti dan kawalan masa jalan ke atas tingkah laku objek. Walau bagaimanapun, adalah penting untuk mendekati kod dinamik dengan berhati-hati, memastikan ujian dan pemahaman yang betul tentang implikasi sifat dinamiknya.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menambah Hartanah dengan Elegan pada Objek dalam C# pada Runtime?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!