2017-06-08 58 views
1

有什麼辦法來強制我的課程的其餘部分訪問屬性設置器而不是支持字段?考慮以下笨拙的代碼:如何從類的其他部分隱藏支持字段

public class Brittle 
{ 
    private string _somethingWorthProtecting; 
    public string SomethingWorthProtecting 
    { 
     get { return _somethingWorthProtecting; } 
     set 
     { 
      _somethingWorthProtecting = value; 
      ReallyNeedToDoThisEverTimeTheValueChanges(); 
     } 
    } 

    public void OhDearWhatWasIThinking() 
    { 
     _somethingWorthProtecting = "Shooting myself in the foot here, aren't I?"; 
    } 
} 

據我所知,C#沒有提供任何機制來防止類開發人員犯這個錯誤。 (在這種情況下,自動屬性顯然不是一種選擇。)有沒有一種設計模式或練習可以幫助防止這種無意的結束?

+0

如果是這樣重要,那麼這是值得進行單元測試 –

+2

*「以防止類的開發者作出這樣的錯誤」 * - 這是矯枉過正,嚴重。如果修改該類的人需要這樣的幫助,那麼寧可不要讓這個人修改任何東西。評論應該足夠了。從另一方面,你可以給這個領域*專用*名稱:'_doNotModifyMePlx'。 – Sinatr

回答

1

您可以在邏輯移動到一個抽象基類:

public abstract class Brittle 
{ 
    private string _somethingWorthProtecting; 
    public string SomethingWorthProtecting 
    { 
     get { return _somethingWorthProtecting; } 
     set 
     { 
      _somethingWorthProtecting = value; 
      ReallyNeedToDoThisEverTimeTheValueChanges(); 
     } 
    } 

    //..... 
} 

那麼你可以肯定沒有人會實例化這個類和派生類不能訪問私有字段。

public class BrittleDerived : Brittle 
{ 
    public void DoSomething() 
    { 
     // cannot access _somethingWorthProtecting; 
    } 
} 
+1

關於這個問題的答案的複製:https://stackoverflow.com/a/3265833/993547 :)兩個思想相同的思想。 –

+0

該解決方案沒有提供任何內容。一個月後,有人會嘗試向基類添加新的功能,問題會回來。 – apocalypse

+0

我的意思是,如果有人可以訪問你的代碼庫,那麼只有很多你可以放入的失敗者。如果他們想破壞你的代碼,他們可以。 – Jonesopolis