2012-06-29 86 views
2

我的問題可能是一個老話題的一部分 - 「屬性vs領域」。哪一個更適合具有自動實現的屬性,私有setter或私有域和屬性只是getter?

我在那裏變量是隻讀的課外但需要一個類內部進行修改的情況。我可以接近它在兩個方面:

第一:

private Type m_Field; 
public Type MyProperty { get { return m_Field; } } 

二:

public Type MyProperty { get; private set; } 

閱讀幾篇文章之後(即主要介紹了使用公共屬性,而不是公共領域的利益)我做如果第二種方法比第一種方法有一些優勢,但不會寫出更少的代碼。我感興趣的是哪一個更適合在項目中使用(以及爲什麼)或者它只是個人選擇。

也許所以我提前道歉這個問題不屬於SO。

+0

我認爲你可以用更少的靈活性的第二個 – V4Vendetta

回答

2

第二個版本產生較少的混亂,但不夠靈活。我建議你使用第二個版本,直到遇到使第一個版本變得必要的情況,然後重構 - 無論如何,變化對本類都是本地的,所以不要太擔心!

通常,編寫較少的代碼是一個好主意。你寫的代碼越少,越少的bug你產生:)

+1

例繼續 - 如果你想給一個默認的初始值,你的私人領域,你必須僅限第一次使用。 – Anchit

+0

第二種方法不靈活的方式是什麼? @Anchit你可以在構造函數中設置默認值,就像使用私有字段一樣。 – James

+0

@詹姆斯,如果你想在設置/獲取之前對後臺做任何事情,那麼你需要實現一個後臺字段。但以後可以輕鬆完成,而且幾乎不需要。 –

0

爲了調試第二個是最好的。否則,您必須在設置該字段的每個位置放置斷點。隨着第二個你在屬性的集合上放置一個斷點。

2

第二個將幾乎編譯到第一個無論如何,所以IMO總是使用第二個,因爲它是不太&整潔的代碼。

我傾向於使用第一種方法的唯一場景是當我想懶洋洋地加載屬性例如

private List<string> _items; 
... 

public List<string> Items 
{ 
    get 
    { 
     if (_items == null) 
     { 
      _items = new List<string>(); 
      // load items 
     } 
     return _items; 
    } 
} 
+0

+1,我也一直這樣做! –

+0

它可能看起來像一個微型的優化,以最民間,但是,它扮演它的一部分,當你開始寫的,其中的內存資源有限的移動設備應用程序。 – James

0

個人而言,我更喜歡第二個版本,因爲它是少寫,所以我可以用時間做更復雜的編碼....加在我看來,它促進了懶惰的發展

2

第二個版本是短,所以我覺得它的通常更好。 當在構造函數中發生唯一的寫訪問時,就是一個例外。然後我更喜歡第一個版本,因爲這可以將該字段標記爲readonly