PDA

View Full Version : سوال: در هنگام ایجاد Property چرا از یک فیلد Private استفاده می شه؟



mrsalam
چهارشنبه 18 فروردین 1389, 12:46 عصر
سلام به همه:بوس:
در هنگام ایجاد Property چرا از یک فیلد Private استفاده می شه؟
یا به عبارتی این دو چه فرقی دارن با هم:



public bool isEmpty
{
get { return isEmpty; }
set { isEmpty = value; }
}
===============================
private Bool _isEmpty;
public bool isEmpty
{
get { return _isEmpty; }
set { _isEmpty = value; }
}

Shahram_Shobeiri
چهارشنبه 18 فروردین 1389, 12:58 عصر
به کمک پراپرتی ها شما دسترسی مستقیم از خارج به اتریبیوت های کلاس را محدود میکنید. یعنی مثلاً با تعریف کردن یک پراپرتی به صورت readonly امکان تغییر یک اتریبیوت را برداشته و آن را فقط خواندنی می کنیم. نیاز به توضیح ندارد که اتریبیوت مربوطه باید در کلاس جاری به صورت private تعریف شود تا از خارج دیده نشده و تنها از دریچه پراپرتی امکان برقراری ارتباط با آن وجود داشته باشد.

mrsalam
چهارشنبه 18 فروردین 1389, 13:01 عصر
پس برای حالت فوق ،لزومی به استفاده از فیلد نیست؟

Shahram_Shobeiri
چهارشنبه 18 فروردین 1389, 13:04 عصر
منظورتون رو از فیلد نمی فهمم
در ضمن فکر می کنم تعریف بالایی ایراد دارد. زیرا با نام خود پراپرتی کار می کند.

exlord
چهارشنبه 18 فروردین 1389, 14:16 عصر
روش اول اشتباهه .....
صحیحش اینجوریه ..

public bool isEmpty { get; set; }

linux
پنج شنبه 19 فروردین 1389, 11:32 صبح
سلام به همه:بوس:
در هنگام ایجاد Propery چرا از یک فیلد Private استفاده می شه؟
یا به عبارتی این دو چه فرقی دارن با هم:

[/left]
تعریف اول مشکل دارد شما مقدار خود پروپرتی را نمی توانید مقدار دهی کنید، در نسخه فریم ورک 3.5 به بعد مدلی تعریف شده به اسم اتوماتیک پروپرتی ،

public bool isEmpty { get; set; }
همونطوری که دوستان گفتند این مدلی هست در حقیقت این مدل یک فیلد خواهد ساخت فقط از نظر شما پنها هست.
پروپرتی ها اگر خوب دقت کرده باشید ، یک روال یا پروسیجر هستند ، اصلا یک قسمتی از حافظه که مقداری را نگه دارند نیستند.
مثال اینکه شما یک فیلد به اسم m_age دارید که مقداری بین 0 تا 120 خواهد گرفت ، می توانید این مقدار را مستقیما با public کردن فیلد بگیرد ولی خارج از کلاس باید مقدار را کنترل کنید تا خارج از محدوده نباشد. ولی با private کردن این فیلد و ساختن یک پروپرتی این وظیفه را به خود کلاس واگذار می کنیم تا از ورود اطلاعات درست مطمئن شویم.
فکر کنم با این مثال مطلب روشن بشود


private int m_Age;
public int Age
{
get { return m_Age; }
set {
if (value >= 0 && value <= 120)
m_Age = value;
else
throw new ArgumentOutOfRangeException("Age is must be a digit between 0 and 120");
}
}

mrsalam
شنبه 21 فروردین 1389, 09:31 صبح
پس در این حالت
public bool Myvar { get; set; }که قرار نیست هیچ اعتبار سنجی انجام شود، می توان بجای Propery از فیلد استفاده شود:

Public Bool MyVar;
تایید می شود؟

amirjalili
شنبه 21 فروردین 1389, 10:48 صبح
بله به این فیلد یا متغیر گفته میشه. کلا PROPERTY جایی استفاده میشه که شما نیاز داشته باشید که کنترلی رو بر روی متغیرتون در خود کلاس داشته باشید.