PDA

View Full Version : سوال: چرا باید از get , set در پروژه های خودمون استفاده کنیم؟



Maryam_1368
جمعه 19 تیر 1394, 11:57 صبح
زمانی که جدول های دیتابیس خودمون رو توی سی شارپ به کلاس تبدیل میکنیم به ازای هر فیلد توی دیتابیس متغیر با نوع مشخص ایجاد می کنیم.درسته؟
حالا من دیدم یه سریا میان علاوه بر اینکه متغیر تعریف میکنن یک سری Proprty هم تعریف میکنن به این صورت


string _title;

یعنی اول متغیر تعریف میکنن بعدش زیرش اینو مینوسین


public string Title
{
get { return _title; }
set { _title = value; }
}

در صورتی که بدون تعریف کردن پراپرتی میشه با دیتابیس ارتباط بر قرار کرد..
دلیل اینکه هم میان متغیبر استفاده میکنن و هم پراپرتی چیه؟ آیا از نظر امنیتی فرق داره؟ یا بهینه تره؟ دلیلش چیه؟

Hadi-Hashemi
جمعه 19 تیر 1394, 12:53 عصر
متغییر رو بصورت Private تعریف میکنن و برای درسترسی بهش از متدهایی که بهش Property میگن استفاده میکنن. Property ها بصورت Public تعریف میشن.

مثلا بعضی وقتها اگه قرار باشه برای متغییری محدوده ایجاد کنیم (مثلا فقط اعداد 0 تا 20) مجبور به استفاده از این روش هستیم.

کلا دسترسی به متغییر باید محدود باشه و باید بجای اینکه همه به متغییر دسترسی داشته باشن بهتره به Property اون دسترسی داشته باشن.



اینا چیزایی بود که من میدونستم - دوستان میان و تکمیلش میکنن :لبخندساده:

systam
جمعه 19 تیر 1394, 12:57 عصر
سلام
بعد کجا ها کارایی داره

amirali0079
جمعه 19 تیر 1394, 14:24 عصر
مثلا یه کلاس مینویسی برای ماشین
یه ماشین رنگ داره
اسم داره
حد اکثر سرعت داره
تعدادی در هم داره (از 2 تا 6 در)
قطعا نمیخوای یکی که با کلاس کار میکنه تعداد در رو 2753 تا وارد کنه چون همچین ماشینی وجود نداره
برای هیمن از Getو Set استفاده میکنی تا چک کنی تعداد در بین 2 تا 6 در هست نه بیشتر

Maryam_1368
جمعه 19 تیر 1394, 16:10 عصر
متغییر رو بصورت Private تعریف میکنن و برای درسترسی بهش از متدهایی که بهش Property میگن استفاده میکنن. Property ها بصورت Public تعریف میشن.

مثلا بعضی وقتها اگه قرار باشه برای متغییری محدوده ایجاد کنیم (مثلا فقط اعداد 0 تا 20) مجبور به استفاده از این روش هستیم.

کلا دسترسی به متغییر باید محدود باشه و باید بجای اینکه همه به متغییر دسترسی داشته باشن بهتره به Property اون دسترسی داشته باشن.
اینا چیزایی بود که من میدونستم - دوستان میان و تکمیلش میکنن :لبخندساده:

خوب متغیر هم میشه Public تعریف کرد و بهش دسترسی داشت
حالا اون بحث محدوده درسته ولی به جز اون؟ یعنی اگه محدوده نذاریم میشه property تعریف نکنیم؟

چرا میگین دسترسی به متغیر محدود باشه؟ دلیلش؟

محمد آشتیانی
جمعه 19 تیر 1394, 16:49 عصر
سلام



چرا میگین دسترسی به متغیر محدود باشه؟ دلیلش؟

به خاطر اینکه بر اساس مفهوم کپسوله سازی ، کدهای خارج از کلاس نباید بتونن بصورت مستقیم بر عملکرد کلاس تاثیر بذارن و بالعکس.

مثلا در نظر بگیرید ، کلاسی می نویسید که مقدار X رو از طریق یک پراپرتی میگیره و با پردازش هایی ، مقدار خروجی پراپرتی دیگری در آن کلاس Y خواهد شد و استفاده کننده از این کلاس نباید مجاز به تغییر مقدار خروجی باشد. طبیعتا با Public Variable نمیتونید ساختار مورد نیاز رو پیاده سازی کنید ، اما با پراپرتی ها و با استفاده از Get به تنهایی ، خروجی Read only خواهید داشت.

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

نهایتا برای اطلاعات بیشتر و کاملتر ، رجوع کنید به اصول شر گرایی (مفهوم کپسوله سازی - encapsulation)




موفق باشید.

sabz12
شنبه 20 تیر 1394, 12:20 عصر
یک سوال برام پیش اومد تو یک برنامه کوچک اصول کپسوله سازی را رعایت نکردیم ولی تو حالت Dibug درست کار میکنه ولی تو حالتRelease خطا می دهد ایا ممکن به این اصول کپسوله سازی که رعایت نکردیم گیر داده باشه؟؟