屬性 Properties 和字段在C 中的關係

2022-07-26 08:12:13 字數 3264 閱讀 9797

——摘自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...