2014-07-09 87 views
3

我一直在使用ReSharper來完成一些清理C#代碼庫的工作。我一直在使用模型類中的私有字段和公共屬性。但是,我發現我可以簡單地將沒有後臺字段的屬性轉換爲自動屬性。這些是模型類;它們中沒有任何方法影響對象中的數據。只使用自動屬性更好嗎?在沒有方法存在的類中是否需要私有字段?

編輯:包括例如「備份域」

public class Gizmo 
{ 
    //this is what I call the "backing" field, only because it's "behind" the 
    //publicly-accessible property and you access it through the property 
    private Int32 _count; 

    //and this is the property, of course 
    public Int32 Count 
    { 
     get { return _count; } 
     set { _count = value; } 
    } 
} 
+0

你所說的「有沒有後備字段屬性」的意思是?如果你在這裏給出一個例子,它會減少混淆...... –

回答

4

是更好地只使用自動性能

如果你的財產包括簡單get;set,你可以用一個「自動屬性」。如果我沒有錯,編譯器會在後臺創建一個專用的後臺字段。

如果在您的財產中,您之前正在進行某種驗證;之前說set然後是有意義的使用屬性與支持字段(非自動)

一個例子是

private string name; 

public string MyName { 
    get { 
     return name; 
    } 
    set { 
     name = (value == null) 
      ? "Anonymous" : value; 
    } 
} 
2

這是一個很值得代碼風格的問題。因此,您應該在整個項目或解決方案中擁有模型屬性的標準。如果你發現汽車性能使你的意圖更加明顯,通過一切手段使用它們 - 只需使用它們一致

4

方法在這裏沒有關係。如果你有一個屬性:

private int foo; 
public int Foo 
{ 
    get { return foo; } 
    set { foo = value; } 
} 

然後絕對有意義的將其轉換成:

public int Foo { get; set; } 

如果有任何其他代碼使用私有字段,你可以改變它使用財產代替。

+0

好的,我敢批評你@jon,但這不完全正確:)如果你需要某種邏輯在setter中(如OP所示)例如),那麼你需要一個支持領域。 – GETah

+0

@GETah:OP沒有*一個例子 - 我特別說*如果*你有一個屬性(屬性沒有邏輯的例子)。是的,如果你在屬性中有邏輯,你需要一個明確的後臺字段,但沒有跡象表明這是這種情況。 –

+0

@GETah:(不可否認,我沒有發現OP談論屬性而沒有支持領域的部分 - 目前還不清楚發生了什麼......如果OP可以舉一個例子,這將是很好的,但我們可能不會得到現在。)。 –

相關問題