2010-02-15 123 views
4

親愛的所有人,哪一個是使用C#的最佳實踐,爲什麼?
1.字段和屬性在C中的最佳實踐#

private string name; 

public string Name 
{ 
    get { return name; } 
    set { name = value; } 
} 

2.

public string Name { get; set; } 

3.

protected string name; 
public string Name 
{ 
    get { return name; } 
    set { name = value; } 
} 

4. 請添加...

+4

沿用您需要的,一個是不優於其他。他們每個人都可以根據自己想要達到的目標獲得資格。 – 2010-02-15 12:01:03

+1

Duplicate - http://stackoverflow.com/questions/295104/what-is-the-difference-between-a-field-and-a-property-in-c – ChrisF 2010-02-16 08:40:58

+0

@yayan:如果你發現其中一個有用的答案,您可以使用投票下方的勾號圖標將其標記爲已接受嗎? – 2010-04-18 08:49:57

回答

13

片段和都很好。第二種方法只是在您不需要訪問底層字段時編寫第一種方法的更方便的方法。

代碼段但是,通常應該避免(除非您有某些特定的原因需要它),因爲字段應該幾乎總是私有的。如果您需要爲後代類提供不同的方式來設置字段(這不太可能),那麼您可以使用方法或其他屬性。

請記住,受保護的成員基本上只是稍微受限制的公共成員,因爲只要它在後代類中,它就可以通過客戶端代碼訪問。這意味着客戶端代碼可以直接綁定到類的實現中而不是它的接口上,這是一個壞事

+1

+用於受保護的警告。應該強制繼承者使用基類的屬性。 – Will 2010-02-15 12:18:41

0

標準一般格式爲:

private string name; 

public string Name 
{ 
    get { return name;} 
    set { name= value; } 
} 

字段將被私人作爲一種標準做法。您的物業將擁有public保護修飾符。

11

開始與第二片段,即

public string Name { get; set; } 

改變它,當你需要添加驗證,或者做一些邏輯,當值被設置在第一個片段的形式。

我會避免最後的選擇,因爲這將允許覆蓋類直接訪問它關係到你一個具體的實施支持字段(這也意味着你的可愛的驗證可以繞過)

0

曝光公共財產,是爲了避免將公共領域的類別暴露給消費者。並且屬性允許您控制消費者使用它的方式(通過獲取&設置)。

1日一個是好的,在你的第二樣品(使用公共&保護)你只是打破...

0
public string Name {get;set} 

第二個例子是一個自動財產,一般使用時,你沒有任何獲取者和設定者的邏輯。這也是編寫第一個例子的簡短形式。

第三個示例具有protected支持字段,因此支持字段可以由子類直接訪問。

根據您的目標選擇格式。另外,可以考慮詢問其他團隊成員是否已經達成一致的格式。

0

大部分在我寫的應用程序中,如果getter和setter並不比您的示例更復雜,您可能希望儘量減少代碼的可讀性,所以速記方法非常有用。另一方面,如果你在getter和setter中實現更復雜的邏輯(例如某種類型的驗證或解析),你想要確保沒有用戶類繞過你的邏輯。

此外,正如評論中提到的Binary Worner,它取決於你需要什麼,以及你想要什麼。你知道private,protectedpublic之間的差異,因此你也知道你可以做什麼和不能做什麼,取決於你選擇哪一個。哪一個是「最好的」完全取決於你希望(並且不希望)從其他類使用這種行爲所允許的行爲。

0

寫入自動屬性(Nº2)作爲默認值,除非您的getter/setter具有某種邏輯,否則屬性(或字段)就不存在 - 您必須同意公共屬性直接訪問其私有領域與公共領域(或自動技術)相同。

0
#region LinkURL 

    private string _LinkURL = String.Empty; 
    public string LinkURL 
    { 
     get { return _LinkURL; } 
     set { _LinkURL = value; } 
    } 

    #endregion LinkURL 

這種方式很容易生成代碼。例如,如果你有Excel屬性或數據庫表,你將不得不實現一個類,你可以檢查這個正則表達式tip:

0

如何通過字段或get操作從兩個屬性讀取最佳實踐?我自己的結論是從現場獲得,因爲這是你想要處理的信息,只需要問我是否思考錯誤。

private string _key; 
    private string _subKey; 
    private string _fullKey; 

    public string SubKey 
    { 
     get 
     { 
      return _key; 
     } 
     set 
     { 
      _key = value; 
     } 
    } 

    public string SubKey 
    { 
     get 
     { 
      return _subKey; 
     } 
     set 
     { 
      _subKey = value; 
     } 
    } 

1.

public string FullKey 
{ 
get 
{ 
return _subKey + _key; 
} 
} 

2.

public string FullKey{ 
get 
{ 
return SubKey + Key 
} 
}