C 中PropertyInfo的用法

2021-10-01 19:00:38 字數 1814 閱讀 8323

敲**遇到乙個問題,因為之前瞧的機房系統的組合查詢功能有許多的資料需要賦值給實體,如果乙個乙個賦值,這樣會導致產生許多相似的**,就會不符合封裝的要求,所以到網上查詢之後,找到propertyinfo。

屬性定義:它提供靈活的機制來讀取、編寫或計算某個私有欄位的值。 可以像使用公共資料成員一樣使用屬性,但實際上它們是稱作「訪問器」的特殊方法。 這使得可以輕鬆訪問資料,此外還有助於提高方法的安全性和靈活性。屬性通常可以分為常規屬性和自動屬性。兩者之間還是有一點區別的,最開始程式設計對著兩個全無概念。

1

private string _age;

2.get訪問器,負責讀取資料,其中可以進行自己的邏輯判斷和資料驗證,以return或者throw結束:

1

get2

3.set訪問器,負責給屬性賦值,類似於乙個返回型別為void的方法,可以包含邏輯處理,例如可以根據預設的值通過計算後返回結果。

上面簡單的說了一下常規屬性,當屬性訪問器中不需要其他邏輯時,可以使用自動屬性,不過需要注意一點的就是宣告自動屬性時,編譯器將建立乙個私有的匿名後備字段,該欄位只能通過屬性的 get 和 set 訪問器進行訪問。這就是我們一般建立乙個實體的時候給實體新增的屬性。

public int id

自動屬性沒有太多可以可以說的東西,簡單的對比一下常規屬性和自動屬性之間的區別吧:

1.自動實現的屬性必須同時宣告 get 和 set 訪問器。建立 readonly 自動實現屬性時,需要將set 訪問器設定為private 。

2.自動實現的屬性 (property) 不允許具有屬性 (attribute)。如果必須在屬性 (property) 的後備欄位上使用屬性 (attribute),則應該只建立常規屬性 (property)。

3.自動實現屬性get,和set中不能包含特殊的邏輯處理。與字段類似,但不同於字段。與字段不同,屬性不作為變數來分類,不能將屬性作為 ref引數或 out引數傳遞

上面大概簡單的說了一下屬性和自動屬性之間的區別,現在可以回歸到文中最開始的時候的那個問題:

1.案例1,如果兩個類中有大部分的字段相同,需要將其中乙個類的字段賦值給另外乙個類:

定義person類:

1

public

class

person

8public

int id

9public

string name

10public

string address

11}

定義user類

public

class

user

public

string name

public

string group

}

轉換方法(當兩個類有很多欄位都是一樣的話,你又不想乙個乙個去賦值,可以使用下面這個方法):

複製**

1

public

static

user

convertobject

(user user,

person person)217

}18}19

}20return user;

21}

方法的呼叫:

1

static

void

main

(string

args)

2

C 中屬性PropertyInfo的使用

昨天程式設計遇到乙個問題兩個類字段都是二十多個,其中有十多個是相同的,需要將乙個類的字段賦值給另外乙個類,開始的自己想手動的乙個個去賦值,後來想來一下c 基礎知識,用propertyinfo就可以解決類似的問題,寫部落格需要內容詳實,我還是慢慢的c 屬性從頭寫起,先看下屬性的定義吧 屬性定義 它提供...

C 中的long與C 中的long

微軟很厲害,c 是非常優秀的計算機語言,c 比c 還厲害,c c 本身不就包含四個 號嗎?而微軟發明了c c 中的long比c 中的long要long兩倍!不信你看 我正在使用.net寫乙個預約排隊的程式,因為一前通過vc編寫了乙個用於顯示登記資訊的控制項,現在使用c 重新預約程式,則必然要呼叫vc...

c中的const與c 中的const

c中的const是乙個偽唯讀識別符號。include include int main 此時輸出a的值為20,被指標間接的改變了。c 中,const進行了增強,不在是乙個偽識別符號了。const int a 10 int p int a p 20 cout a p endl cout a endl ...