PDA

View Full Version : سوال: پراپرتی های اتوماتیک (Automatic Properties) در دات نت 3.0



babak1
سه شنبه 19 بهمن 1389, 10:29 صبح
سلام :
بحثی در این رابطه مطرح شده بود که چندتا سوال داشتم در موردش داشتم. بحث مطرح شده به شکل زیر است :

به جای نوشتن :

private string _userName;
public string userName
{
get { return _userName; }

set { _userName = value; }
}میتوانید بنویسید :

public string userName { get; set; }پیشنهاد خود مایکروسافت هم استفاده از حالت دوم است چون اگر snippet مربوط به prop رو اجرا کنید میبینید که برای این حالت تغییر یافته است.

چند نکته :
1- در پشت پرده و بصورت اتوماتیک ساختاری همانند پراپرتیهای سنتی تشکیل میشود اما دسترسی به فیلد آن امکان پذیر نیست.
2- اگر بخواهید یک پراپرتی فقط خواندنی یا فقط نوشتنی ایجاد کنید باید از همان روش سنتی استفاده کنید.
3- این نوع پراپرتی فقط جهت encapsualte کردن یک فیلد به کار میره و چنانچه نیاز به نوشتن عملیات خاصی (مثل اعتبارسنجی و ...) داشته باشید؛ باید از همان نوع سنتی استفاده کنید.

1- سوال من از بخش اول این هستش که اگه قراره _username توسط username از خارج از کلاس مقدار دهی بشه ، دیگه چرا لقمه رو می پیچونیم. خوب یک دفعه _username رو public کنیم و خلاص !!
سوال دوم رو بعد از این بحث مطرح می کنم.
با تشکر.

ACorvinus
سه شنبه 19 بهمن 1389, 11:26 صبح
سلام.

اگه در چند تا کلاس بخواییم از چند پروپرتی همنام استفاده کنیم آنگاه از پروپرتی های public همنام یه رابط (Interface) میسازیم بعدش کلاس رو از رابطی که ساختیم ارث بری کرده و رابط رو Implement می کنیم. (برای ساختن رابط از روش دوم استفاده می کنیم). ولی اگه بخوایم در کلاسی یه پروپرتی تعریف کنیم باید از روش اول استفاده کنیم.


سوال من از بخش اول این هستش که اگه قراره _username توسط username از خارج از کلاس مقدار دهی بشه

قرار نیست از خارج از کلاس مقدار دهی بشه مگر اینکه هنگام set کردن یه مقدار به پروپرتی نخوایم عملیاتی رو در بلوک set انجام بدیم.

babak1
سه شنبه 19 بهمن 1389, 19:05 عصر
ولی اگه بخوایم در کلاسی یه پروپرتی تعریف کنیم باید از روش اول استفاده کنیم.
خوب من می گم چرا پروپرتی ما به این شکل نباشه :
public string _username;
چه تفاوتی بین این و روش اول وجود داره ؟؟؟ اینطوری هم get و هم set میشه !

ACorvinus
چهارشنبه 20 بهمن 1389, 17:06 عصر
خوب من می گم چرا پروپرتی ما به این شکل نباشه :
public string _username;
چه تفاوتی بین این و روش اول وجود داره ؟؟؟ اینطوری هم get و هم set میشه !

عزیز خود میکروسافت میگه اگر قرار باشه هنگام set کردن یا get کردن عملیات خاصی رو انجام بدین در ان صورت از پروپرتی استفاده کنین درغیر اینصورت از همون روشی برین که شما به آن اشاره کردین.
پس هیچ مشکلی نیست. هرجور راحتی.