PDA

View Full Version : مبتدی: get; set; چیست و چکار میکند؟



amirali0079
پنج شنبه 07 خرداد 1394, 13:23 عصر
سلام دوستان من تو فیلم های آموزشی میبینم بجای اینکه به متغیر مقدار بده اونو اینجوری مینویسه
public string Username { get; set; }


مثل:

public class UserProfile
{
public string Username { get; set; }
public string Password { get; set; }
public bool IsUserActive { get; set; }
}

hsgpro
پنج شنبه 07 خرداد 1394, 13:56 عصر
سلام
تا اون جایی که من می دونم اینا متغیر نیستن Property هستن که میشه از طریق بخش Properties ویژوال استودیو تغییرشون داد.

https://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx

ebrahim.rayatparvar
پنج شنبه 07 خرداد 1394, 14:37 عصر
سلام دوست من
همونطوری که دوست خوبمون گفتن این ها متغیر نیستن، property هستند که برای مقدار دادن به متغیرر های داخل یک کلاس استفاده میشن. برای اینکه امنیت کلاس رو بالا ببریم و هر شی ای نتونه به طور مستقیم به متغیر های کلاس دسترسی داشته باشه برای همین متغیر های خودمون رو از نوع خصوصی (Private) می گیریم و به وسیله Property به متغیر های خودمون مقدار می دیم که عموما به کپسوله کرندن معروف است.
اطلاعات کمی بود که من در این مورد می دونستم و گفتم و خوشحال میشیک دوستان دیگه هم اطلاعاتی بیشتر به این تاپیک اضافه کنند

RmeXXXXXXXXX
پنج شنبه 07 خرداد 1394, 23:38 عصر
Property یا خصیصه: اعلام وضعیت شی
get برای موقعی که خصیصه خوانده میشه فراخوانی میشه و باید شامل دستور return باشد
set مقداری که باید به خصیصه تعلق بگیرد درون متغیری ازپیش تعرفی شده value به این قسمت وارد میشه
وجود حداقل یکی از get و یا set الزامی ست. یا اگه فقط get باشه خصیصه فقط خواندنی اگه فقط set باشه خصیصه فقط نوشتی و اگه هردوباشن که خواندنی و نوشتی میشن.
هرکدوم از get و یا set میتونه دسترسی محدودتری نسبت به دسترسی تعریف شده در امضا خصیصه داشته باشن
در واقع CLR هیچ چیزی از وجود خصیصه ها نمیدونه و فقط این کامپایلر سی شارپه (و زبانهای دیگه) که خصیصه ها رو میشناسند. خصیصه ها بصورت متد شناخته میشوند برای CLR درست مثل زبان جاوا که اصلاً چنین مفهومی رو نداره.

جوری که شما نوشتین توصیه شده که خصیصه ها رو اینطوری تعریف نکنید چرا؟
اگر کلاسی اینچنین عمل کنه دیگه قابل سریالیز شدن نیست! چون کامپایلر یه سری متغیر بصورت پیشفرض برای این خصیصه ها ایجاد میکنه که توی هربار کامپایل اسمشون تغییر خواهند کرد. پس اطلاعاتی که سریالیز شدن دیگه قابل استفاده مجدد نیستند چون متغیر نگهدارنشون پیدا نخواهد شد.
همچنین این کار باعث میشه که سربار پیشتری برای کامپایلر ایجاد کنید.
همچنین امکان Add Watch متغیر محلی رو از دست میدید چون متغییری ننوشتین براشون. (همیشه نمیتونید یک خصیصه رو واچ کنید)
در ویژوال استادیو شما میتونید با تعریف یک متغیر خصوصی در کلاس و سپس کلیک روی خط تعریف و فشردن دکمه کنترل + R + E (دکمه کنترل رو پایین نگه دارید، کلید آر بعد کلید إی) اونو بصورت خصیصه عمومی تبدیل کنید.