我才意識到,在C#屬性結構還可以與私人訪問修飾符使用:是否有任何理由在C#中使用私有屬性?
private string Password { get; set; }
儘管這在技術上是有趣的,我無法想象我會用它,因爲一個私人領域涉及即使少儀式:
private string _password;
,當我會永遠需要是我無法想象能夠內部得到但不設置或設置但不得到私有字段:
private string Password { get; }
或
private string Password { set; }
但也許有一個用例與嵌套/繼承類或可能在哪裏一個get/set可能包含邏輯,而不僅僅是回饋屬性的值,儘管我傾向於保持屬性的嚴格性,並讓顯式方法執行任何邏輯操作。 GetEncodedPassword()
。
有沒有人在C#中使用私有屬性是出於任何原因,還是僅僅是那些技術上可行但很少使用的實際代碼構造?
附錄
尼斯的答案,通過他們讀我宰殺這些用途爲私人性質:
- 當私人領域需要延遲加載
- 當私人領域需要額外的邏輯或計算值
- 由於專用字段可能難以調試
- 爲了「向您自己提交合同」
- 在內部轉換/簡化公開的屬性序列化
- 包裝全局變量的一部分,你的類
「私人字符串密碼{get;}」甚至不合法的C#。它不會編譯。 – 2010-07-22 15:17:53
@eric true,它會得到錯誤「... Password.get'必須聲明一個實體,因爲它沒有標記爲抽象或外部自動實現的屬性必須同時定義get和set訪問器。我只是假定它會工作,因爲我使用'公共字符串密碼{得到{返回_密碼;經常。 – 2010-07-22 15:30:18
私人財產鼓勵的技術是*自封裝* - 請參閱:http://sourcemaking.com/refactoring/self-encapsulate-field – LBushkin 2010-07-22 18:30:10