2013-04-16 46 views
2

有人告訴我,你可以將以下代碼:編寫C#屬性的最短路線?

private string name; 

public string Name 
{ 
    get; 
    set; 
} 

與以下和苦於沒有不良影響:

public string Name; 

我認識到財產,在第一個例子設置像不漂亮如果我將其刪除並將原始屬性設置爲public,但它與第二種方法適用於僅需要基本getter和setter的屬性是不好的編程習慣?

+1

您的第一個示例將創建兩個不相關的成員,名稱和名稱。 'Name'是一個自動屬性;它不會使用你寫的'name'字段,而是一個不可見的字段,帶有一些你不能直接使用的瘋狂名字。如果你想使用你自己的變量,提供訪問器的主體,如'public string Name {get {return name; } set {name = value; }}。 –

回答

0

我認爲最簡單的辦法是使用Auto-Implemented Properties以及關於它們的一些參考信息

在C#3.0及更高版本,自動實現的屬性使屬性聲明更簡潔當屬性訪問器,無需額外的邏輯。它們還使客戶端代碼能夠創建對象。當您按照以下示例所示聲明屬性時,編譯器會創建一個專用匿名支持字段,該字段只能通過屬性的get和set訪問器訪問。

公共字符串名稱{;設置;}

0

寫屬性使用自動getter和setter的最短路徑。

這是不太你已經把你的問題,雖然是什麼,你已經取代了傳統的財產具有支持字段,具有

自動的getter/setter看起來是這樣的:

public string Blah { get; set; }

此功能是在C#3推出,我相信。所以你必須以此爲目標,或以上,才能使用這些。

4

第二種方式不是屬性,而是一個字段。你應該總是使用面向公有值的屬性的原因是,從字段到屬性的轉換構成了一個重大變化。通過使用屬性,您可以稍後更改getter或setter的行爲,而不會破壞引用您的任何代碼。

請記住,代碼 public string Foo { get; set; }

實際上相當於

private string foo; 
public string Foo 
{ 
    get { return foo; } 
    set { foo = value; } 
} 
+1

在第一個例子中,'private string name;'也沒有意義。 – Liam

0
public string Name { get; set; } 

MSDN:

屬性是,提供了一個靈活的機制來讀出的部件,寫入或計算專用字段的值。屬性可以像使用公共數據成員一樣使用,但它們實際上是稱爲訪問器的特殊方法。這使數據能夠被輕鬆訪問,並且仍然有助於提高方法的安全性和靈活性。

3

當您使用屬性時,您可以更好地控制哪些屬性。

private string name; 

public string Name 
{ 
    get; 
    set; 
} 

錯了,它應該是

public string Name 
{ 
    get; 
    set; 
} 

private string name; 

public string Name 
{ 
    get { return name;} 
    set { this.name = value;} 
} 

有時當你想變量設置裏面只有U類可以使用

public string Name 
{ 
    get; 
    private set; 
} 

屬性結合兩個方面lds和方法。對於對象的用戶,屬性看起來是一個字段,訪問該屬性需要完全相同的語法。對於類的實現者,屬性是一個或兩個代碼塊,代表一個get訪問器和/或一個set訪問器。 get屬性被讀取時執行get訪問器的代碼塊;設置訪問器的代碼塊在屬性被分配新值時執行。沒有設置訪問器的屬性被認爲是隻讀的。沒有get訪問器的屬性被認爲是隻寫的。具有訪問器的屬性是可讀寫的。

來源:http://msdn.microsoft.com/en-us/library/w86s7x04(v=vs.80).aspx

0

的公共屬性是不一樣的公共實例變量。

而這種差異可能很重要。 例如,如果您使用DroDownListBox中的數據綁定asp.net控件(如DataTextField),如果將其設置爲實例變量而不是公共屬性,則會失敗。