2011-07-11 247 views
2

屬性訪問

之間
public string Name 
{ 
    get 
    { 
    return _name; 
    } 
    set 
    { 
    _name = value; 
    } 
} 
public string Name {get; set;} 
+0

其他可能的重複:http://stackoverflow.com/questions/4923630/c-getters-setters-declaration和http://stackoverflow.com/questions/1568091/why-use-getters-and-setters –

回答

10
  1. 您可以訪問內場,在第二種情況下它是自動生成的
  2. 可以在VS設置一個斷點任何根本的區別,在第二你不能。
2

沒什麼根本,你可以通常它們之間的變化安全....直到一些已經使用的字段名(我在看BinaryFormatter這裏...)。

否則,不。通常情況下,你可以在兩者之間切換,而不會破壞事物,例如添加邏輯或向該字段添加屬性。

1

基本上沒有什麼根本區別,如果你想爲20個屬性做這個,當你不需要封裝,但是希望有未來的選擇時,#2會爲你節省很多行。

1

對於你的類的外部消費者(假設_name是私有的),它們是相同的,除非你使用類似BinaryFormatter的東西,它使用反射來存儲對象的內部狀態。

對於您的課程,主要區別在於您在使用自動屬性時無權訪問該字段。這意味着你不能做一些事情,比如使用該屬性作爲ref或out參數。例如,如果您有一個int值並且正在讀取構造函數中的默認值,則不能說Int32.TryParse(s, out Range)。你可以說Int32.TryParse(s, out _range)