PDA

View Full Version : سوال: آیا غالباً از متدهای Get و Set برای Encapsulation استفاده میشه؟



sahel65
دوشنبه 05 فروردین 1392, 21:23 عصر
سلام به همه؛
شبتون بخیر؛
میخواستم بپرسم آیا از متدهای Get و Set در زمانهایی که میخوایم به فیلدهامون دسترسی و یا امنیت رو تنظیم کنیم استفاده میشه یا استفاده های دیگری هم داره؟

sahel65
سه شنبه 06 فروردین 1392, 18:31 عصر
دوستان نظری ندارید؟

ordebehesht
سه شنبه 06 فروردین 1392, 18:49 عصر
دوست من مفهوم کپسوله سازی ربطی به تعریف یک نوع نداره شما با استفاده از get و set نوعی از داده تعریف میکنی با شروط خودت

sahel65
سه شنبه 06 فروردین 1392, 19:06 عصر
ممنونم دوست من؛
پس تو این لینک (http://www.csharp-station.com/Tutorials/Lesson10.aspx)منظورش اونی که من میگم نبوده؟
مثلا تو بحث
Listing 10-3. Read-Only Properties که تو همین لینک هستش در این بخش get و set رو اضافه کرده در صورتی که تو مبحث اولش که دسترسی عمومی بوده این دو متد نیستن؟؟؟

plus
سه شنبه 06 فروردین 1392, 19:07 عصر
هم برای کنترل ورود و خروج مقادیر فیلد ها، استفاده میشن، هم به عنوان جایگزین متدهای get و set.مثلا کلاس DateTime بجای پیاده سازی متدی به اسم GetTime، مشخصه Now رو (فقط به صورت get) تعریف کرده که تاریخ همون لحظه سیستم رو برمیگردونه (یعنی مقدار یک فیلد رو بر نمیگردونه.).استفاده های دیگه ای هم میشه، برای مثال، برای raise کردن رویداد های مربوط به تغییر مشخصه های یک کلاس:

class PagedDataGridView : DataGridView
{
public event EventHandler PageChanged;
private int currentPage = 1;
...
...
public int CurrentPage
{
get { return this.currentPage; }
set
{
if (value != this.CurrentPage)
{
if (value < 0 || value >= PageCount)
throw new Exception("....");

this.currentPage = value;
this.PageChanged(this, EventArgs.Empty);
}
}
}
...
...
}

در این کلاس که فرض کنید کلاسی هست که اطلاعات رو در صفحه های مختلف نمایش میده، علاوه بر کنترلی که روی مشخصه CurrentPage میشه، در صورتی که مقدار مشخصه CurrentPage تغییر داده بشه، رویداد PageChanged این کلاس Raise میشه تا عملیاتی که هنگام عوض شدن صفحه لازم هست، انجام بشه...
البته این یک مثال بود، استفاده های دیگه ای هم میشه از مشخصه ها برد..

ordebehesht
سه شنبه 06 فروردین 1392, 19:25 عصر
ممنونم دوست من؛
پس تو این لینک (http://www.csharp-station.com/Tutorials/Lesson10.aspx)منظورش اونی که من میگم نبوده؟
مثلا تو بحث که تو همین لینک هستش در این بخش get و set رو اضافه کرده در صورتی که تو مبحث اولش که دسترسی عمومی بوده این دو متد نیستن؟؟؟

توجه کن این متد نبست یعریف نوع داده هستش

ordebehesht
سه شنبه 06 فروردین 1392, 19:26 عصر
میشه گفت نوعی محدودیت به دذاده اصلی هستش

sahel65
سه شنبه 06 فروردین 1392, 23:50 عصر
دوست عزیزم plus؛ از راهنمایی هایی که کردی ممنونم.
پس من هنوز خوب کاربرد این دو تا رو متوجه نبودم.
ببینید تو این پست (http://barnamenevis.org/showthread.php?389717-%D8%A2%DB%8C%D8%A7-%DA%A9%D9%84%D8%A7%D8%B3%DB%8C-%DA%A9%D9%87-%D8%A8%D8%B1%D8%A7%DB%8C-%DA%AF%D8%B1%D9%81%D8%AA%D9%86-%DB%8C%DA%A9-%D8%B9%D8%AF%D8%AF-%D9%86%D9%88%D8%B4%D8%AA%D9%85-%D8%AF%D8%B1%D8%B3%D8%AA-%D8%A7%D8%B3%D8%AA%D8%9F&p=1726870&viewfull=1#post1726870)؛ دوستمون گفت که
باید از تو متدت از Get و Set برای دریافت و برگرداندن استفاده کنی
حالا تو برنامه ای که تو این پست (http://barnamenevis.org/showthread.php?390533-%D9%86%D8%AD%D9%88%D9%87-%D9%BE%D8%A7%D8%B3-%D8%AF%D8%A7%D8%AF%D9%86-%D9%85%D8%AA%D8%BA%DB%8C%D8%B1-%D8%A7%D8%B2-%D9%85%D8%AA%D8%AF%DB%8C-%D8%A8%D9%87-%D9%85%D8%AA%D8%AF%DB%8C-%D8%AF%DB%8C%DA%AF%D8%B1-%D8%AF%D8%B1-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D8%A7%DB%8C%28%D9%85%D9%82%D8%B3%D9%88%D9%85-%D8%B9%D9%84%DB%8C%D9%87%29-%DA%A9%D9%87-%D9%86%D9%88%D8%B4%D8%AA%D9%85-%D8%AF%D8%B1%D8%B3%D8%AA%D9%87%D8%9F&p=1730774#post1730774) نوشتم؛ میخوام کاربر اگه عددی وارد کرد که منفی بود اونو یا قبول نکنه یا خود برنامه عدد رو مثبت در نظر بگیره.
امکانش هست بگید با get و set این منظور رو به چه نحوی اعمال کنم؟ (البته با فرض اینکه نخواهیم از If استفاده کنیم و فقط با get و set بخوایم انجام بدیم)؟

ASKaffash
چهارشنبه 07 فروردین 1392, 07:45 صبح
سلام
لطفا شما میتوانید اصل Encapsulation را از اصول چهارگانه OOP تعریف کنید؟
ممنون



دوست من مفهوم کپسوله سازی ربطی به تعریف یک نوع نداره شما با استفاده از get و set نوعی از داده تعریف میکنی با شروط خودت

ordebehesht
چهارشنبه 07 فروردین 1392, 22:25 عصر
http://www.tiak.blogfa.com/post-20.aspx
به این لینک سر بزن

ordebehesht
چهارشنبه 07 فروردین 1392, 22:28 عصر
به این لیمنک هم یه سر بزن
http://www.hamcodi.ir/article/133