2011-09-24 45 views
0

我有一個類庫項目。我在下面有一個物業。這不是一個只讀屬性C中的屬性獲取器設置器#

private Int32 ABC ; 
public Int32 ABCD 
     { 
      set 
      { 
       this.ABC = value; 
      } 
      get 
      { 
       return this.ABC; 
      } 
     } 

我的問題是,是否有必要聲明私有變量相同,的getter/setter?

編輯

我的意思是可以把它像下面?

public Int32 ABCD {} 
+0

刪除了 「{獲取;集;}」 從問題。 – Pankaj

+1

爲什麼?這是做到這一點的正確方法。 –

+0

但下面提到的答案是說與你相反! – Pankaj

回答

5

Automatic property聲明要求在括號中的get; set;語句(這是你在你原來的問題有什麼):

public Int32 ABCD { get; set; } 

的空屬性塊是無效的。

1

如果你做第二選擇,C#會爲你創建第一個選擇。

+0

更新我的問題。 – Pankaj

3

使用在C#3.0(VS 2008)或更高版本中引入的自動實現的屬性。
http://msdn.microsoft.com/en-us/library/bb384054.aspx

public Int32 Abcd {get;set;} 

編譯器爲您創建支持字段。但它是匿名的,無法訪問。如果稍後發現需要訪問支持字段,則可以顯式聲明它並使用該字段重新實現getter和setter,而不會中斷接口。

1

是否有必要聲明相同的私人變量和getter/setter?

如果你的意思是有必要使用私有變量然後是的,這是(除非您使用BoltClock提到的自動方法)。你應該記住,這是一個完整的代碼塊,所以你可以在那裏做幾乎任何你喜歡的事情 - 儘管你應該在理性的範圍內做,因爲你不想要任何會讓訪問屬性過慢的東西。

例如,更改屬性可能會有副作用,即可能需要更新另一個屬性,或者您可能不得不通知其他屬性也發生了更改。

如果你沒有通知或做其他事情,那麼自動getter/setter方法開發得更快(並不是聲稱它是最快(或最慢)執行)。

2

使用自動實現的屬性,它從2008年interduced:

public Int ABCD 
    { 
     set; 
     get; 
    } 

但不同的是默認值,即在支持字段屬性,你可以在變量,但在這種情況下,默認設置的默認值是.NET默認。 (實際上你應該在構造函數中初始化它的默認值)。

1

你可以像這樣

public string ABCD { get;set;}