2011-02-07 79 views
15

可能重複:
Why use getters and setters?
C# 3.0 Auto-Properties - useful or not?C#的getter,setter方法聲明

有定義屬性通過以下方式之間的差異 - 至於

// private, with getter & setter 
private string fName; 
public string Name 
{ 
    get { return this.fName } 
    set { this.fName = value } 
} 

// define as a Property 
public string Name { get; set;} 

我可以告訴,它只是廁所ks喜歡文體偏好。我錯過了什麼嗎?

+0

有效地不 - 這個問題以前已經問過很多次了。 – ChrisF 2011-02-07 16:23:35

+0

@ChrisF它絕對是一個愚蠢的,但我不認爲你得到的是相當重複 – 2011-02-07 16:28:23

回答

26

差異:

  • 第二種形式將只與一個C#3的編譯器編譯或更高
  • 第二種形式不允許任何代碼(甚至在同一類)訪問因爲真正的領域有一個「難以形容的名字」

第二個版本是所謂的自動i財產(或簡稱「自動財產」)。它們是在C#3中引入的。如果您只編寫看起來像第一個版本的代碼 - 即沒有涉及邏輯 - 則自動屬性非常好。您隨後可以通過將其轉換爲第一種形式來添加邏輯。您的所有代碼都將與該更改兼容,兼容源代碼和二進制兼容性。

請注意,自動屬性不允許允許您指定默認值,並且不存在真正的只讀自動屬性(即沒有getter的屬性)。你可以最近的是一個有私人二傳手的公共獲得者,例如

public string Name { get; private set; } 

這不完全相同,但它在很多情況下足夠接近。

0

最終,它在這種情況下發揮相同的作用。當您想要將任何規則應用於獲取/設置時,會出現差異,在這種情況下,您需要使用私有/受保護的變量並將其隱藏在公共屬性後面。

2

第一個是標準屬性。您必須定義一個字段來存儲值。第二個是auto-implemented property,僅在C#3.0及更高版本中可用。

0

不。實際上,當您使用較短版本(public string Name { get; set; })時,編譯器會自動爲該屬性生成專用字段。