Karena saya menulis artikel MSDN yang Anda maksud, saya kira saya harus menjawab yang ini.
Pertama, saya mengantisipasi pertanyaan ini dan itulah sebabnya saya menulis posting blog yang menunjukkan kasus penggunaan yang kurang lebih nyata untuk ExpandoObject: Dynamic di C # 4.0: Memperkenalkan ExpandoObject .
Singkatnya, ExpandoObject dapat membantu Anda membuat objek hierarkis yang kompleks. Misalnya, bayangkan Anda memiliki kamus di dalam kamus:
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"]);
Semakin dalam adalah hierarki, yang lebih buruk adalah kode. Dengan ExpandoObject tetap elegan dan mudah dibaca.
dynamic expando = new ExpandoObject();
expando.Address = new ExpandoObject();
expando.Address.State = "WA";
Console.WriteLine(expando.Address.State);
Kedua, seperti yang sudah ditunjukkan, ExpandoObject mengimplementasikan antarmuka INotifyPropertyChanged yang memberi Anda lebih banyak kontrol atas properti daripada kamus.
Akhirnya, Anda dapat menambahkan acara ke ExpandoObject seperti di sini:
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);
}
}
Juga, ingatlah bahwa tidak ada yang menghalangi Anda untuk menerima argumen peristiwa secara dinamis. Dengan kata lain, alih-alih menggunakan EventHandler
, Anda dapat menggunakan EventHandler<dynamic>
yang akan menyebabkan argumen kedua dari pawang menjadi dynamic
.