有人告訴我,你可以將以下代碼:編寫C#屬性的最短路線?
private string name;
public string Name
{
get;
set;
}
與以下和苦於沒有不良影響:
public string Name;
我認識到財產,在第一個例子設置像不漂亮如果我將其刪除並將原始屬性設置爲public
,但它與第二種方法適用於僅需要基本getter和setter的屬性是不好的編程習慣?
有人告訴我,你可以將以下代碼:編寫C#屬性的最短路線?
private string name;
public string Name
{
get;
set;
}
與以下和苦於沒有不良影響:
public string Name;
我認識到財產,在第一個例子設置像不漂亮如果我將其刪除並將原始屬性設置爲public
,但它與第二種方法適用於僅需要基本getter和setter的屬性是不好的編程習慣?
我認爲最簡單的辦法是使用Auto-Implemented Properties以及關於它們的一些參考信息
在C#3.0及更高版本,自動實現的屬性使屬性聲明更簡潔當屬性訪問器,無需額外的邏輯。它們還使客戶端代碼能夠創建對象。當您按照以下示例所示聲明屬性時,編譯器會創建一個專用匿名支持字段,該字段只能通過屬性的get和set訪問器訪問。
公共字符串名稱{;設置;}
寫屬性使用自動getter和setter的最短路徑。
這是不太你已經把你的問題,雖然是什麼,你已經取代了傳統的財產具有支持字段,具有場。
自動的getter/setter看起來是這樣的:
public string Blah { get; set; }
此功能是在C#3推出,我相信。所以你必須以此爲目標,或以上,才能使用這些。
第二種方式不是屬性,而是一個字段。你應該總是使用面向公有值的屬性的原因是,從字段到屬性的轉換構成了一個重大變化。通過使用屬性,您可以稍後更改getter或setter的行爲,而不會破壞引用您的任何代碼。
請記住,代碼 public string Foo { get; set; }
實際上相當於
private string foo;
public string Foo
{
get { return foo; }
set { foo = value; }
}
在第一個例子中,'private string name;'也沒有意義。 – Liam
public string Name { get; set; }
MSDN:
屬性是,提供了一個靈活的機制來讀出的部件,寫入或計算專用字段的值。屬性可以像使用公共數據成員一樣使用,但它們實際上是稱爲訪問器的特殊方法。這使數據能夠被輕鬆訪問,並且仍然有助於提高方法的安全性和靈活性。
當您使用屬性時,您可以更好地控制哪些屬性。
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
的公共屬性是不一樣的公共實例變量。
而這種差異可能很重要。 例如,如果您使用DroDownListBox中的數據綁定asp.net控件(如DataTextField),如果將其設置爲實例變量而不是公共屬性,則會失敗。
您的第一個示例將創建兩個不相關的成員,名稱和名稱。 'Name'是一個自動屬性;它不會使用你寫的'name'字段,而是一個不可見的字段,帶有一些你不能直接使用的瘋狂名字。如果你想使用你自己的變量,提供訪問器的主體,如'public string Name {get {return name; } set {name = value; }}。 –