PDA

View Full Version : تفاوت دو دستور تعریف یک متغیر



Iran58
سه شنبه 28 بهمن 1393, 11:25 صبح
سلام
تفاوت این دو دستور در چیست وکاربرد کدام بهتراست
1) private string NationalID;
public string NationalId
{
get { return NationalID; }
set { NationalID = value; }
}
2)public string NationalID { get; set; }

SabaSabouhi
سه شنبه 28 بهمن 1393, 11:31 صبح
سلام
تفاوت این دو دستور در چیست وکاربرد کدام بهتراست
1) private string NationalID;
public string NationalId
{
get { return NationalID; }
set { NationalID = value; }
}
2)public string NationalID { get; set; }

سلام
این دو تا دقیقاً یکی هستن. حالت دوم رو بهش Auto Property می‌گن و برای
خلاصه شدن حالت اول به #C اضافه شد.

صبا صبوحی

winner1
سه شنبه 28 بهمن 1393, 11:33 صبح
ببین همیشه تو برنامه نویسی روش اول توصیه میشه چرا چون اصلا پراپرتی ها برای کنترل ورود و خروج مقادیر به فیلدهای کلاسمون هستن کاربردشون اینه :لبخندساده:

SabaSabouhi
سه شنبه 28 بهمن 1393, 13:31 عصر
ببین همیشه تو برنامه نویسی روش اول توصیه میشه چرا چون اصلا پراپرتی ها برای کنترل ورود و خروج مقادیر به فیلدهای کلاسمون هستن کاربردشون اینه :لبخندساده:

سلام
نه دوست من، حکم نادرست صادر نکن. این دو دقیقاً یکی هستن.
اگه لازم باشه چیزی رو کنترل کنی، باید از روش اول استفاده کنی، در غیر این صورت همیشه Source کوتاه‌تر و ساده‌تر، خوانایی بیشتری داره.
اگه تو getter یا setter نخواهیم کد خاصی بنویسیم، خیلی بهتره که از auto property استفاده بشه.
حتا برای فقط خواندنی یا فقط نوشتی کردن یک Property هم می‌شه از auto property استفاده کرد.

صبا صبوحی

winner1
سه شنبه 28 بهمن 1393, 14:14 عصر
سلام
نه دوست من، حکم نادرست صادر نکن. این دو دقیقاً یکی هستن.
اگه لازم باشه چیزی رو کنترل کنی، باید از روش اول استفاده کنی، در غیر این صورت همیشه Source کوتاه‌تر و ساده‌تر، خوانایی بیشتری داره.
اگه تو getter یا setter نخواهیم کد خاصی بنویسیم، خیلی بهتره که از auto property استفاده بشه.
حتا برای فقط خواندنی یا فقط نوشتی کردن یک Property هم می‌شه از auto property استفاده کرد.

صبا صبوحی
دوست من با این حساب هیچ فرقی با فیلد عمومی نداره منطقی که واسش وجود داره اینه:لبخندساده:

sajadsobh
سه شنبه 28 بهمن 1393, 15:15 عصر
سلام
تفاوت این دو دستور در چیست وکاربرد کدام بهتراست
1) private string NationalID;
public string NationalId
{
get { return NationalID; }
set { NationalID = value; }
}
2)public string NationalID { get; set; }

شاید از نظر کارایی یکی باشند ولی روش اول رو encapsulation (http://www.csharp-station.com/Tutorial/CSharp/lesson19) میگند. یعنی تعریف متغیر های خصوصی و استفاده از اون ها فقط داخل کلاسی که خودتون ساختید. در اینصورت شما فقط اجازه میدید که از طریق متدها و پروپرتی ها به این متغیرها دسترسی داشته باشند.

محمد آشتیانی
سه شنبه 28 بهمن 1393, 15:39 عصر
سلام




شاید از نظر کارایی یکی باشند ولی روش اول رو
encapsulation (http://www.csharp-station.com/Tutorial/CSharp/lesson19)
میگند. یعنی تعریف متغیر های خصوصی و استفاده از اون ها فقط داخل کلاسی که خودتون ساختید. در اینصورت شما فقط اجازه میدید که از طریق متدها و پروپرتی ها به این متغیرها دسترسی داشته باشند.


خیر اینطور نیست و تفاوتی ندارند.





این دو تا دقیقاً یکی هستن. حالت دوم رو بهش Auto Property می‌گن و برای
خلاصه شدن حالت اول به #C اضافه شد.


همونطور که جناب صبوحی فرمودند عملا این دو تفاوتی با هم ندارند ، بر اساس این مطلب (https://msdn.microsoft.com/en-us/library/bb384054.aspx) شما وقتی یک Auto Property تعریف میکنید ، کامپایلر یک BackField بصورت خصوصی و بی نام برای دسترسی private در نظر میگیره.




موفق باشید.