معرفی ExpandoObject در سی شارپ به زبان ساده

رتبه: 0 ار 0 رای sssss
ExpandoObject
نویسنده: میلاد حیدری زمان مطالعه 3 دقیقه
Banner Image

همان طور که در مقاله قبلی دیدیم؛ می توانیم از کلیدواژه داینامیک برای تخصیص دادن اشیائی استفاده کنیم که به واسطه آن می توانیم به ویژگی های تعریف شده دست پیدا کنیم؛ در حالی که ابتدا کلاس را تعریف نمی کنیم. آنچه که نمی توانیم با استفاده از شیء داینامیک انجام دهیم؛ این است که نمی توانیم بعد از آن که شیء اولیه مقداردهی شده است؛ به صورت دینامیکی ویژگی هایی را به آنها اضافه کنیم. اگر به این توانایی خاص نیاز نداشته باشید؛ سی شارپ برای شما راه حلی در نظر گرفته است: ExpandoObject.

بیایید مستقیم سراغ مثال ها برویم؛ بنابراین شما می توانید مشاهده کنید که استفاده از آن چقدر ساده می باشد:

dynamic user = new System.Dynamic.ExpandoObject();
user.Name = “John Doe”;
user.Age = 42;
user.HomeTown = “New York”;
Console.WriteLine(user.Name + ” is ” + user.Age + ” years old and lives in ” + user.HomeTown);

دقت کنید که چگونه یک شیء را با نوع دینامیک بیان می کنیم؛ در حالی که ExpandoObject را نمونه سازی کرده ایم. چرا که اگر شیء به عنوان یک ExpandoObject بیان شده باشد، کامپایلر آن را بررسی خواهد کرد و به سرعت درمورد عدم وجود ویژگی هایی که خودمان برای آن ساخته ایم؛ خطا می دهد (Name، Age و ….). می توانیم با بیان عبارت به صورت داینامیک؛ از این اتفاق جلوگیری کنیم؛ که همان طور که از مقاله قبلی یاد گرفتیم؛ کاری می کنیم که کامپایلر به بررسی ویژگی هایی که می خواهیم استفاده کنیم؛ نپردازد.

یک نکته جالب آن است که ExpandoObject می تواند ویژگی هایی داشته باشد که ExpandoObject نیز هستند؛ و به شما اجازه می دهد انواع پیچیده تری را تحت پردازش قرار دهید. به مثال زیر توجه کنید:

dynamic user = new System.Dynamic.ExpandoObject();
user.Name = “John Doe”;
user.Age = 42;

user.HomeTown = new System.Dynamic.ExpandoObject();
user.HomeTown.Name = “New York”;
user.HomeTown.ZipCode = 10001;

Console.WriteLine(user.Name + ” is ” + user.Age + ” years old and lives in ” + user.HomeTown.Name + ” [” + user.HomeTown.ZipCode + “]”);

من به سادگی ویژگی HomeTown را از یک رشته به یک ExandoObject تغییر داده ام؛ و سپس ویژگی ها را به آن اضافه کرده ام؛ در این مثال نام و کد پستی شهر می باشد. اما همینجا تمام نمی شود – می توانیم با استفاده از برخی ترفندهای بسیار پیشرفته؛ حتی متدهایی را به شیء در حال پردازش اضافه کنیم.

user.DescribeUser = (Func<String>)(() => {
return user.Name + ” is ” + user.Age + ” years old and lives in ” + user.HomeTown.Name + ” [” + user.HomeTown.ZipCode + “]”;
});

Console.WriteLine(user.DescribeUser());

مشاهده می کنید که یک کد نویسی بسیار شسته و رفته می باشد، اما واقعاً ExpandoObject چیست؟ این کلیدواژه در واقع چندین رابط جالب را پیاده سازی می کند ، اما یکی از آنها IDictionary<string,object> می باشد- این بدان معنی است که تحت چارچوب Syntetical sugar، ExpandoObject شما در واقع فقط یک دیکشنری است که مقادیر شیء را بر اساس کلیدهای رشته نگه می دارد. این همچنین بدان معنی است که تکرار بیش از یک ExpandoObject به آسانی تکرار یک دیکشنری معمولی است. این شرایط را می توان به راحتی عملی کرد:

dynamic user = new System.Dynamic.ExpandoObject();
user.Name = “John Doe”;
user.Age = 42;

foreach (KeyValuePair<string, object> kvp in user)
{
Console.WriteLine(kvp.Key + “: ” + kvp.Value);
}

خلاصه

نوع ExpandoObject به شما اجازه می دهد اشیائی را در حین پردازش تعریف کنید و سپس هر زمان که خواستید ویژگی هایی را به آن اضافه کنید. از آنجایی که این نوع داده در واقع داینامیک می باشد؛ مزایا و معایبی که در مقاله قبلی بیان کردیم؛ در این مورد نیز وجود دارند. ExpandoObject یک رابط INotifyPropertyChanged را پیاده سازی می کند؛ که برای مثال اگر می خواهید از WPF برای برنامه خود استفاده کنید؛ خیلی به کارتان خواهد آمد.

profile name
میلاد حیدری

بخندید کتاب بخونید و خوب باشید تا جامعه مون به آرامش برسه. لطفا ! هر سوالی دارید در بخش نظرات مطرح کنید. ما یا سایر هموطنان عزیز پاسخ خواهیم داد. برای کمک به سایت ما و گسترش آموزش در بین هموطنان، در سایتها، وبلاگ ها و شبکه های اجتماعی لینک سایت ما را درج کنید.

مطالب پیشنهادی برای شما

محصولات مرتبط

مشاهده همه

دیدگاهتان را بنویسید

1 2 3 4 5

0 نظر درباره «معرفی ExpandoObject در سی شارپ به زبان ساده»

    هنوز نظری برای این بخش ثبت نشده است
مشاهده همه نظرات
سبد خرید
سبد خرید شما خالی است
× جهت نصب روی دکمه زیر در گوشی کلیک نمائید
آی او اس
سپس در مرحله بعد برروی دکمه "Add To Home Screen" کلیک نمائید