যেহেতু আপনি যে এমএসডিএন নিবন্ধটি লিখেছেন সে সম্পর্কে আমি লিখলাম, আমার ধারণা এই উত্তরটি আমাকে দিতে হবে।
প্রথমত, আমি এই প্রশ্নটি আগে থেকেই অনুমান করেছিলাম এবং সে কারণেই আমি একটি ব্লগ পোস্ট লিখেছিলাম যা ExpandoObject এর জন্য কম-বেশি বাস্তব ব্যবহারের কেস দেখায়: সি # 4.0 এ ডায়নামিক: ExpandoObject উপস্থাপন করছে ।
খুব শীঘ্রই, ExpandoObject আপনাকে জটিল শ্রেণিবিন্যাস তৈরি করতে সহায়তা করতে পারে। উদাহরণস্বরূপ, কল্পনা করুন যে আপনার অভিধানের মধ্যে একটি অভিধান রয়েছে:
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"]);
গভীরতর হায়ারার্কি, কুরুচিযুক্ত কোড। ExpandoObject এর সাথে এটি মার্জিত এবং পঠনযোগ্য থাকে।
dynamic expando = new ExpandoObject();
expando.Address = new ExpandoObject();
expando.Address.State = "WA";
Console.WriteLine(expando.Address.State);
দ্বিতীয়ত, যেমন এটি ইতিমধ্যে চিহ্নিত করা হয়েছিল, ExpandoObject INotifyPropertyChanged ইন্টারফেস প্রয়োগ করে যা আপনাকে অভিধানের চেয়ে বৈশিষ্ট্যের উপর আরও নিয়ন্ত্রণ দেয়।
শেষ পর্যন্ত আপনি এখানে ExpandoObject এ ইভেন্ট যুক্ত করতে পারেন:
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);
}
}
এছাড়াও, মনে রাখবেন যে কোনও কিছুই আপনাকে গতিশীল উপায়ে ইভেন্টের যুক্তিগুলি গ্রহণ করতে বাধা দিচ্ছে না। অন্য কথায়, ব্যবহারের পরিবর্তে EventHandler
, আপনি ব্যবহার করতে পারেন EventHandler<dynamic>
যা হ্যান্ডলারের দ্বিতীয় যুক্তির কারণ হতে পারে dynamic
।