主題:這篇文章我來說下屬性(properties)和字段在c#中的關係。首先申明一下,這裡講的屬性就是通常說的包含get,或者是set訪問器的屬性,不是屬性 (attribute)。我們寫程式的時候大多都會用到實體類,而生成實體類,我們都會申明一些常規屬性或者是自動實現的屬性。至於到底選用哪一種屬性,或者說是否可以直接用字段代替呢?
常規屬性(帶有私有字段)和自動實現屬性的區別:
乙個完整的常規屬性由以下幾部分構成:
1:私有字段,用來儲存變數(後備儲存),這個字段之所以是私有的,是為了讓它只能通過屬性來賦值。
private
string
_sname;
2:乙個get訪問器,它負責讀取資料,用於返回字段值或者是用於計算並返回字段值。以return或者是throw語句終止。其中可以包含些簡單的邏輯處理,例如資料驗證等等。
get
private
string
_sname;
public
string
sname}
3:乙個set訪問器,負責給屬性賦值,類似於乙個返回型別為void的方法,可以包含邏輯處理,例如可以根據預設的值通過計算後返回結果。
常規屬性分類:
1:按訪問修飾符來分:可將屬性標記為 public、private、protected、internal 或 protected internal。這些訪問修飾符定義類的使用者如何才能訪問屬性。
2:屬性還可以標記成,靜態屬性,例項屬性,虛屬性,抽象屬性,需要注意的是,如果屬性已經標記成靜態(static ) 的,那麼後面不能和虛(virtual),抽象(abstract),重寫(override)混用。
3:同一屬性如果只包含get訪問器,我們稱之為唯讀屬性,如果只包含set訪問器,叫可寫屬性,如果即有get, 又有set訪問器,我們叫可讀可寫屬性。
什麼是自動實現的屬性?
當屬性訪問器中不需要其他邏輯時,自動實現的屬性可使屬性宣告變得更加簡潔。當您如下面的示例所示宣告屬性時,編譯器將建立乙個私有的匿名後備字段,該欄位只能通過屬性的 get 和 set 訪問器進行訪問。
public
string
sname
自動實現屬性和常規屬性的區別:
1:自動實現的屬性必須同時宣告 get 和 set 訪問器。若要建立 readonly 自動實現屬性,請給予它 private set 訪問器。
2:自動實現的屬性 (property) 不允許具有屬性 (attribute)。如果您必須在屬性 (property) 的後備欄位上使用屬性 (attribute),則應該只建立常規屬性 (property)。
3:從自動實現屬性的定義來看,可以發現在get,和set中不能包含特殊的邏輯處理。這點從功能上講有點類似欄位的作用,但和字段又有區別。
什麼是字段,這裡不用多說,這裡講下欄位和屬性的區別:
1:欄位在值的處理上並不是那麼的靈活,給它賦什麼它就是什麼,不允許經過邏輯處理。如果把乙個人的身高寫成乙個字段,給它賦值1000m,這顯示是不正常的資料,字段無法處理這種特殊資料。
2:與字段不同,屬性不作為變數來分類。因此,不能將屬性作為 ref引數或 out引數傳遞。下面的寫法都是錯誤的:
class
studentproperties3
}private
static
void
refname(
refstring
sname)
private
static
void
outname(
string
sname,
outstring
sname2)
studentproperties3 s3
=new
studentproperties3();
s3.sname ="
王五";sname
=s3.sname;
refname(
refs3 .sname );
//錯誤
outname(sname,
outsname);
//錯誤
常規屬性,自動實現屬性和字段都各有特點:
1:常規屬性功能最全,靈活必也最強。
案例:專案開發中,有時會發現兩個系統之間的某些類中屬性有部分相同有部分不同,呼叫時需要把乙個類的相關屬性賦值給另乙個類的相同屬性,如果屬性的數目較少,我們可以乙個乙個手工來寫,但如果較多,或者屬性裡面中包含複雜屬性,我想這是比較煩人的事,有了屬性就會變得更加簡潔。
//轉換公共屬性
propertyinfo proas
=s3.gettype().getproperties();
propertyinfo probs
=s4.gettype().getproperties();
if(proas
!=null
&&proas.length
>0&&
probs
!=null
&&probs.length
>0)
}}}
2:自動實現屬性較常規屬性**簡潔,但靈活性不夠(get,set訪問器中不能包含邏輯**)。在資料的儲存和讀取上功能和字段相同。
3:字段,**最少,但靈活性最差。如果欄位在賦值和取值時並無邏輯處理,可以選擇字段。字段結合方法的使用可以和常規屬性功能相比。
屬性 Properties 和字段在C 中的關係
摘自rocky ren 屬性 properties 和字段在 c 中的關係 主題 這篇文章我來說下屬性 properties 和字段在 c 中的關係。首先申明一下,這裡講的屬性就是通常說的包含 get,或者是set 訪問器的屬性,不是屬性 attribute 我們寫程式的時候大多都會用到實體類,而生...
Properties屬性集合
properties屬性集合概述 是乙個雙列集合,實現了map介面,繼承hashtable類。properties集合的特點 建立物件時不需要指定泛型 鍵和值都是字串 可以和流技術相加使用 可以直接通過流將集合中的資料儲存到檔案中 可以直接從檔案中讀取資料到集合 屬性檔案要求 命名要求 x.prop...
C 字段,屬性和屬性封裝字段
c 類成員包括 字段,屬性和方法。對於日常對於乙個類我們新增成員時會有幾種方法。如對於乙個person 類,我們對於其中乙個成員 性別 gender 進行定義,可以寫成 1,public string gender 2,public string gender 3,private string ge...