2011-10-04 61 views
2

Possible Duplicate:
C# getters, setters declaration空的財產申報之間的區別

這些財產申報之間的區別是什麼?他們如何工作,爲什麼是首選。

public string aString {get;set;}

OR

private string bString = ""; 
    public string aString 
    { 
     get { return bString; } 
     set { bString = value; } 
    } 

注意:這不是一個緊急或重要的問題,而是一個詢問誰知道爲什麼事情應該做某種方式的人的問題。此外,請舉例說明哪種情況最適合每種實施。

+0

可能的錯字; set {aString = value; }應該可以設置{bString = value; }? – DeCaf

+1

這麼多次被問到。嘗試搜索。 – Reniuz

+0

另一個可能的錯誤:自動屬性被聲明爲public;完整的財產是私人的。你真的是這個意思嗎? – CesarGon

回答

3

首先是automatic property,第二個是我們已知的經典屬性。

In C# 3.0 and later, auto-implemented properties make property-declaration more concise when no additional logic is required in the property accessors. They also enable client code to create objects. When you declare a property as shown in the following example, the compiler creates a private, anonymous backing field that can only be accessed through the property's get and set accessors.

當你沒有任何特別的邏輯來在GET添加和設置部分屬性,那麼你可以只使用自動的性能,因爲它更少的代碼,更少的代碼意味着更容易維護和更少的錯誤。

只有當您需要在屬性上添加一些邏輯(如驗證)時,才應切換到經典屬性語法。

0

最明顯的區別是,你可以不設置ASTRING變量並返回它,因爲你總是返回bString ...

1

設計: 使用第二,如果你需要做的確切時刻的東西分配(提高事件,更改其他字段,保存undoredo信息,寫入文件以及大量其他可能性)。

實用:使用第二,如果你只需要調試,因爲你不能breakpoint上自動生成的屬性。

首先在所有其他情況下使用。

0

一個區別是,在自動屬性的情況下,你不能有一個私人setter。這只是一種語言快捷方式或語法糖,使事情更易於開發(生成的代碼看起來更乾淨...)。 如果您查看已編譯的程序集,則編譯器將與「經典」版本中的代碼完全相同。