C 中屬性PropertyInfo的使用

2022-02-05 01:38:21 字數 2571 閱讀 6232

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

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

常規屬性以前做winform的時候經常使用,現在開始使用ef,基本上都是使用自動屬性,看下常規屬性的完成構成:

1.私有字段,一般設定為私有,通過屬性來賦值保證起安全性:

private string _age;

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

get 

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

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

public int id

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

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

2自動實現的屬性上可以使用特性,不能用在支援後備欄位上。 如果屬性的後備欄位上使用特性,則應該只建立常規屬性。

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

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

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

定義person類:

public class person 

public int id

public string name

public string address

}

定義user類

public class user 

public string name

public string group

}

轉換方法:

public static user convertobject(user user,person person)}}

}return user;

}

方法的呼叫:

static void main(string args)

2.之前在做winform的時候就經常回使用到sqlhelper,現在也有很多公司是這麼使用的,當時很多東西感覺就是重複性的操作,一度以為程式設計只是複製貼上,下面這段**大家應該很常見:

listlist = new list();

sqldatareader sdr = new sqldatareader();

while (sdr.read())

開始寫的時候覺得是鍛鍊了,寫的多了就覺得無聊了,其實完全可以換一種方式來實現上面的**:

public static listconvertdata(sqldatareader sdr)}}

list.add(model);

}return list;

}

listlist = new list();

sqldatareader sdr = cmd.executereader();

list = convertdata(sdr);

3.案例三,ajax頁面傳遞值可以使用get方式,或者post方式的傳遞json格式資料轉換

簡單的轉換乙個get傳遞的字串name=xx&age=xx,後台直接用乙個字典去模擬了:

dictionarydic = new dictionary();

dic.add("id",100);

dic.add("name", "keso");

dic.add("group", "程式設計師");

轉換字典方法:

public static t convertdic(dictionarydic)}}

return model;

}

最後的呼叫:

user user = convertdic(dic);

C 中的屬性

1.屬性就是對字段的封裝,其本質就是乙個get方法和乙個set方法。value是個關建字,它其實就是乙個引數,用來指代使用者輸入的內容。using system namespace 2019 10 26set public int age set 2.即使不需要做任何邏輯驗證,也不能把字段宣告稱pu...

C 中的屬性

屬性是代表類的例項或類中的乙個資料項的成員。屬性指的是一組兩個匹配的 稱為訪問器的方法 public 返回型別 識別符號 set訪問器總是 get訪問器總是 屬性跟字段的相同點 屬性跟字段的不相同點 訪問器的重點如下 寫入和讀取屬性的訪問器時,會被隱式呼叫 注意 不能顯式地呼叫訪問器,就跟呼叫函式那...

C 中類的屬性

關於為什麼要使用屬性 用於替代原c 或者其它程式語言中的訪問器和變異器。一直以來很多程式語言都是用訪問器來實現對私有變數操控,比如setspeed 及getspeed 這是兩種方法,以前c 的寫法是 int speed int maxspeed 100 bool setspeed int s els...