Rumah >pembangunan bahagian belakang >C++ >Bilakah Saya Harus Memilih ExpandoObject Daripada Kamus atau Hashtable dalam .NET?
Pengenalan kelas ExpandoObject dalam .NET 4 telah menimbulkan persoalan tentang преимущества над использовании силицал. Walaupun ExpandoObject menawarkan fungsi yang serupa dengan struktur data ini, ia mempunyai kelebihan unik yang meningkatkan utilitinya.
Satu kelebihan ketara ExpandoObject ialah keupayaannya untuk memudahkan penciptaan hierarki kompleks objek. Apabila kamus bersarang menjadi sukar digunakan, ExpandoObject menyediakan penyelesaian yang lebih elegan dan boleh dibaca. Pertimbangkan contoh berikut:
Dictionary<String, object> dict = new Dictionary<string, object>(); Dictionary<String, object> address = new Dictionary<string,object>(); dict["Address"] = address; address["State"] = "WA"; Console.WriteLine(((Dictionary<string,object>)dict["Address"])["State"]);
Berbanding dengan pendekatan di atas, ExpandoObject membenarkan sintaks yang lebih ringkas dan intuitif:
dynamic expando = new ExpandoObject(); expando.Address = new ExpandoObject(); expando.Address.State = "WA"; Console.WriteLine(expando.Address.State);
ExpandoObject implements antara muka INotifyPropertyChanged, memberikannya kawalan tambahan ke atas sifat dibandingkan kepada kamus semata-mata. Antara muka ini membolehkan objek memberitahu pemerhati apabila nilai harta berubah, memudahkan pengikatan data dan senario pengesahan harta.
Akhir sekali, ExpandoObject menyokong pengendalian acara, membolehkan anda melampirkan dan menanggalkan pengendali acara kepada hartanya. Ciri ini memberikan fleksibiliti dalam mengurus dan bertindak balas kepada acara objek:
class Program { static void Main(string[] args) { dynamic d = new ExpandoObject(); // Initialize the event to null (meaning no handlers) d.MyEvent = null; // Add some handlers d.MyEvent += new EventHandler(OnMyEvent); d.MyEvent += new EventHandler(OnMyEvent2); // Fire the event EventHandler e = d.MyEvent; e?.Invoke(d, new EventArgs()); } static void OnMyEvent(object sender, EventArgs e) { Console.WriteLine("OnMyEvent fired by: {0}", sender); } static void OnMyEvent2(object sender, EventArgs e) { Console.WriteLine("OnMyEvent2 fired by: {0}", sender); } }
Selain itu, ExpandoObject membenarkan anda mengendalikan hujah acara secara dinamik menggunakan EventHandler
Atas ialah kandungan terperinci Bilakah Saya Harus Memilih ExpandoObject Daripada Kamus atau Hashtable dalam .NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!