2013-05-14 93 views
0

這個簡單的問題已經有一段時間令我感到困擾,我已經看到了兩種形式的聲明屬性,我在想,它們有什麼不同,是否有任何理由讓我更喜歡另一種?哪種形式的財產申報更合適?

1表格:

public int Age { get; set; } 

第二形態:

private int _Age; 
public int Age 
{ 
    get { return _Age; } 
    set { _Age = value; } 
} 

我一直使用的第二種形式,也是我已經看到了這個MSDN Tutorial關於第二個形式只是談判,所以我這裏有點困惑,哪一個是首選?

回答

2

第一種形式相當「新」。所以你會發現很多包含第二種形式的「舊」代碼。

今天,使用C#現代版本,使用第二形式的唯一原因是掛鉤吸氣劑或setter內部更多的邏輯。

例如:

private int myPropertyValue; 

public int MyProperty 
{ 
    get 
    { 
     return myPropertyValue; 
    } 
    set 
    { 
     if (value >= 0 && value <= 100) 
     { 
      myPropertyValue = value; 
     } 
     else 
     { 
      // throw exception here. 
     } 
    } 
} 
+0

非常感謝Jan – Mehran

+0

不客氣:) –

+1

使用顯式字段的另一個原因是對於只讀屬性,您可以使後臺字段只讀 - 對於不可變類很好 –

1

第一個是罰款時,你是不是做對財產的任何額外處理或訪問控制。這只是一個做的更快的方式,在C#中引入了3

看一看here

+0

謝謝Colm for your幫助 – Mehran

1

這確實是一個偏好問題。第一種格式只是語法上的糖,在這種格式中,編譯器會爲您生成第二種格式。如果我沒有做任何操縱或評估,我寧願選擇第一種形式,因爲它更短更整潔。但是,正如其他人所指出的,如果你正在做前期C#3,那麼你別無選擇,只能做第二形式

+0

感謝您的幫助傑森,我很感激 – Mehran

1

我只用,如果我有一個愚蠢的類,它沒有與該領域的第一種形式本身即它只是存儲一個值。

因此,在大多數情況下,我會使用第二種形式。這使您可以將驗證邏輯添加到外部(對類)消費者的getter/setter中,但是當從該類的內部方法訪問該字段時,我會將它更加封閉的生態系統進行驗證,其中經常只是驗證浪費處理器週期。