——摘自rocky ren
屬性(properties)
和字段在
c#中的關係
主題:這篇文章我來說下屬性(properties)
和字段在
c#中的關係。首先申明一下,這裡講的屬性就是通常說的包含
get,
或者是set
訪問器的屬性,不是屬性
(attribute)
。我們寫程式的時候大多都會用到實體類,而生成實體類,我們都會申明一些常規屬性或者是自動實現的屬性。至於到底選用哪一種屬性
,或者說是否可以直接用字段代替呢
?常規屬性和自動實現屬性的區別:
乙個完整的常規屬性由以下幾部分構成:
1:私有字段,用來儲存變數
(後備儲存
),這個字段之所以是私有的,是為了讓它只能通過屬性來賦值。
private
string
_sname;
2:乙個
get訪問器,它負責讀取資料,用於返回字段值或者是用於計算並返回字段值。以
return
或者是throw
語句終止。其中可以包含些簡單的邏輯處理,例如資料驗證等等。
get說明:
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 =
newstudentproperties3();
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 中的關係
主題 這篇文章我來說下屬性 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...