(read only)حالا که دیدیم ویژگی‌های فقط خواندنی چطور کار می‌کنن، خب ویژگی‌های فقط نوشتنی چی؟(write only)
خب، یه مثال خیلی خوب برای ویژگی فقط نوشتنی، رمز عبوره.
خب، اگه ما یه مشتری داشته باشیم و اون مشتری نیاز داشته باشه برای ورود به حسابش رمز داشته باشه،
باید رمز عبور رو یه جوری ذخیره کنیم. درسته؟
درسته؟
و اگه بخوایم مطمئن بشیم رمز عبور به هیچ روشی، توسط هیچ متدی فاش نشه،
اینجاست که از ویژگی‌های فقط نوشتنی استفاده می‌کنیم.
پس بیایم یه متغیر خصوصی جدید بسازیم: private string _password.
(backing field)و این همون فیلد پشتیبان برای ویژگی فقط نوشتنی ما خواهد بود.
prop stringحالا ویژگی فقط نوشتنی رو با می‌سازم.
و اسمش رو می‌ذارم Password.
getterاین ویژگی نباید setter داشته باشه، فقط باید داشته باشه که خودمون تعریف کنیم.
چی می‌خوایم بذاریم؟setterخب حالا توی
Password می‌خوایم مقدار رمز عبور رو برابر با مقداری که به می‌دیم تنظیم کنیم.
پس اینجا الان یه ویژگی فقط نوشتنی شد.
چون رمز عبور فقط می‌تونه تنظیم بشه، قابل خوندن نیست.
و اینو توی وبسایت‌ها هم زیاد می‌بینید. درسته؟
می‌رید توی یه وبسایت و مثلا رمزتون رو فراموش کردید.
وبسایت رمزتون رو نمی‌فرسته، چون نمی‌تونه بخونه‌ش.
اون خیلی ریسکی می‌شد.
ولی کاری که می‌کنه اینه که میگه لطفاً یه رمز جدید تنظیم کنید.
حالا واضحه که یه جوری باید رمز رو بعداً مقایسه کنه و اینا، ولی اون بحث برای وقتی‌یه که
می‌خوایم ورود کاربرها رو دقیق بررسی کنیم.
ولی اینجا فقط در مورد مفهوم کلی ویژگی‌های فقط نوشتنیه.
خب فرض کنیم حالا مشتری‌های ۱، ۲، ۳ و ... رو داریم.
customer3.Passwordمی‌تونیم بگیم و بعد یه رمز براش تنظیم کنیم.
مثلاً هر رشته تصادفی‌ای اینجا.
خب این میشه رمز عبورش.
و می‌تونیم چند تا کاراکتر خاص هم اضافه کنیم تا امن‌تر بشه.
خب.
پس الان مشتری ۳ ما یه رمز عبور داره.
ولی اگه بخوام بهش دسترسی داشته باشم و چاپش کنم، نمی‌تونم.
مثلاً customer3.Password.
Passwordاین باعث خطا میشه چون ویژگی نمی‌تونه توی این زمینه استفاده بشه
نداره.getterچون
چیه؟getterخب
getter همینه.
مثلاً Name یه getter داره.
getter ماIDیا داره.setter فقطPassword داره. ولی رشته
نداریم اینجا.getterپس
نمی‌تونیم رمز رو بخونیم. درسته؟
فقط می‌تونیم ستش کنیم.
پس الان رمز تنظیم شده، ولی فقط برای یه مشتری.
نه بقیه.customer3 یعنی
و این کاریه که می‌تونیم جاهای دیگه برنامه هم انجام بدیم.
و حالا می‌بینید چرا مهمه که فیلد پشتیبان رمز رو مستقیماً استفاده نکنیم.
چون این یکی قابل دسترسی میشه.
و می‌تونیم مقدارش رو بخونیم.
پس توی کد می‌تونیم مثلاً...
IDوقتی جزئیات رو می‌گیریم، بگیم اینه و رمز هم اینه.
_passwordو اینجا می‌تونیم از استفاده کنیم.
و اینطوری ناگهان به رمز عبور دسترسی پیدا می‌کنیم.
و این یه مثال خوبه برای اینکه چرا ویژگی‌ها اینقدر مهمن.
چون اینطوری می‌تونیم رمز رو افشا کنیم.
خب بیاید اینو اجرا کنیم.
و جزئیات مشتری ۳ رو بگیریم.
به این شکل.
و حالا رمز عبور مشتری ۳ نمایش داده میشه.
پس می‌بینید چرا اینقدر مهمه که فیلدهای پشتیبان رو بیرون از تعریف ویژگی استفاده نکنیم.
اینجا داریم رمز رو تنظیم می‌کنیم.
و اگه بخوایم به رمز دسترسی داشته باشیم و ازش استفاده کنیم، همیشه باید از ویژگی استفاده کنیم.
نه فیلد.
و همونطور که می‌بینید حتی توی خود این کلاس هم به ویژگی دسترسی نداریم.
هست وprivateچون ویژگی نداره.getter
این رو اینجا دوباره می‌بینید.
پس این واقعاً خیلی مهمه.
و همین باعث میشه جلوی افشای اطلاعاتی که نباید دیده بشن گرفته بشه.
خب.
پس بیاید این بخش رو دوباره حذف کنیم.
اما...
حالا می‌دونید کل ماجرا چطور کار می‌کنه.
البته روش‌های پیشرفته‌تری هم وجود دارن که حتی نذارن به رمز دسترسی داشته باشیم
hashمثل استفاده از و این چیزها، که اون برای بعده.
باشه.
خب، پس می‌بینمتون توی ویدیوی بعدی.