پراپرتی‌های فقط نوشتنی در C# ?

بالاخره استفاده بکنیم یا نه؟
بالاخره استفاده بکنیم یا نه؟

همیشه برام سوال بود که پراپرتیهای write-only یا set-only دقیقا کجا کاربرد دارن... وقتی توی رفرنس سی شارپ نگاهی بندازید میگه که پراپرتیهای رایت اونلی فقط در موارد نادر و فقط برای محدود کردن دسترسی به اطلاعات حساس به کار میرن. مثلا یه همچین چیزی:

public string password { set { _password = value; } }

اینطوری وقتی که طرف پسورد رو ست کنه دیگه بهش دسترسی نداره. شاید به نظر توضیح خوبی باشه برای اینکه رایت اونلی پراپرتی چیه ولی واقعیتش اصلا جالب به نظر نمیاد. به نظر راه حلی عجیب و غیر منطقی میاد. چونکه پراپرتی قراره که مثل فیلد عمل کنه اگر چه پشت پرده در واقع مثل متد عمل میکنه. اینکه ما یک پراپرتی رایت اونلی داشته باشیم به شدت خلاف اون ذهنیتی است که از فیلدها داریم. توی این جور مواقع بهترین راه برای تغییر یک متغیر استفاده از تابعه. چون کسی که تابع رو صدا میزنه توقع نداره که الزاما بتونه به اون دیتایی که پاس داده دوباره درسترسی داشته باشه.

با اینکه به نظرم پراپرتیهای رایت اونلی بی کاربرد به نظر میان ولی همیشه برام سوال بود که پس چرا سی شارپ اونها رو درست کرده و براشون کارکرد محدودی در نظر گرفته؟ تا اینکه امروز به این صفحه برخوردم:

https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/property?redirectedfrom=MSDN

یکی از توصیه‌های دات نت برای طراحی پراپرتی اینه:

پراپرتی‌ای درست نکنید که سطح دسترسی setter اش از getter اش بیشتر باشد. مثلا اینطور نباشد که ستر شما پابلیک باشد ولی گتر پراتکتد.
اگر نمی‌توانید برای پراپرتی خود getter را فراهم کنید در عوض آن را تبدیل به متد کنید. بهتر است اسم متد را با پیشوند Set آغاز کنید. مثلا کلاس AppDomain به جای قرار دادن پراپرتی رایت اونلی CachePath یک تابع به نام SetCachePath درست کرده است.
https://virgool.io/p/sijmq6mqedsc/نتیجهاخلاقیاینکهبهترهاصلاازپراپرتیهایرایتاونلیاستفادهنکنیم.

نتیجه اخلاقی اینکه بهتره اصلا از پراپرتیهای رایت اونلی استفاده نکنیم.