سی شارپ

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

اساطیر زبان

همان طور که در مقاله قبلی دیدیم؛ می توانیم از کلیدواژه داینامیک برای تخصیص دادن اشیائی استفاده کنیم که به واسطه آن می توانیم به ویژگی های تعریف شده دست پیدا کنیم؛ در حالی که ابتدا کلاس را تعریف نمی کنیم. آنچه که نمی توانیم با استفاده از شیء داینامیک انجام دهیم؛ این است که نمی توانیم بعد از آن که شیء اولیه مقداردهی شده است؛ به صورت دینامیکی ویژگی هایی را به آنها اضافه کنیم. اگر به این توانایی خاص نیاز نداشته باشید؛ سی شارپ برای شما راه حلی در نظر گرفته است: 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 برای برنامه خود استفاده کنید؛ خیلی به کارتان خواهد آمد.

تفاوت پک های حرفه ای ما با آموزشهای رایگان: بطور خلاصه از زمین تا آسمان! 1-پکها، جدیدترین نسخه نرم افزارها را آموزش می دهند با قابلیت های بسیار بیشتر. 2-پکها توسط متخصص آن نرم افزار، به صورت کاملا پروژه محور و با حل چالش هایی که در مسیر کار عملی و حرفه ای با آن روبرو می شوید تهیه شده اند و بعد از استفاده، کاملا برای بازار کار آماده اید! 3- متد این پکها کاملا کار شده و تا ماهها، در ذهن تان ماندگارند و یادگیری بسیار سریعتر و کاملتری خواهید داشت. آموزشهای رایگان فقط دستورات نرم افزارها را (آنهم ناقص) بیان می کنند و تازه برای ورود به بازار باید ماهها تجربه عملی هم کسب کنید !!

turned_in

چرب زبان

با این اپلیکیشن ساده، هر زبانی رو فقط با 5 دقیقه در روز، توی 80 روز مثل بلبل حرف بزن! بهترین متد روز، تقویت حافظه، آموزش تصویری. یادگیری زبان کلید یادگیری هر مهارتی در قرن 21 !


حتما بخوانید!

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این فیلد را پر کنید
این فیلد را پر کنید
لطفاً یک نشانی ایمیل معتبر بنویسید.

فهرست