C 學習紀要 6 7月15日

2021-05-25 17:33:07 字數 1769 閱讀 5175

今天真好。保持微笑。真好,哈哈。

7月15日   星期三  天氣晴

昨天帶著遺憾離開了,因為泛型方法的動態呼叫的問題,還沒有得到很好的解決。今天一定要把它幹了!

10:18--------終於成功。馬上要寫一篇日誌,記錄反射技術的使用心得。

關於反射

反射是在執行時獲得類、方法等的資訊,並加以使用的一種技術。

看看我要做什麼吧:

linq中每乙個資料表對應乙個實體類,而表中的每一條記錄對應乙個實體類物件。

現在我首先要將這些資料表記錄從資料庫中讀出來,變成乙個個實體類物件,然後再把他們序列化,寫入到二進位制檔案中。

從資料庫讀記錄出來,用的是這樣一條語句: tabletable = database.gettable. database這個變數是乙個datacontext,等於是乙個資料庫的對映,table類是system.data.linq空間下的乙個類,是乙個實現了iemurable泛型介面的,可以用getemurator,得到乙個迭代器,即是tentity這個實體類的所有類物件的集合。(這些物件的集合其實就是資料記錄的集合了)

本來是很簡單的,問題是,如果有100個表,那難道我要寫100條上面的語句(tentity換成具體的實體類名)來獲得100個table嗎?這肯定是不可行的,所以唯一的解決方法就是動態呼叫泛型方法!

怎麼做呢?

利用反射技術就可以達到目的了。利用三點:一:type型別描述和記錄實體類資訊   二:反射技術對方法的動態呼叫 三:泛型方法的呼叫

首先,使用乙個容器類,當然可以是泛型容器了,裡面裝上所有實體類的型別type,比如這個容器是listtypelist;

typelist.add(typeof(sys_control));

typelist.add(typeof(sys_user));

將100個實體型別全部裝載進去,好的。

第二步,寫乙個方法,注意必須是公用方法,否則是動態呼叫不了的。因為找不到。

比如說,我現在要獲得每乙個實體類的類物件的個數。其實也就是每乙個資料表的記錄數了。

好的,那這個方法是

public static int gettablecount()  where t:class{

tabletable = database.gettable();

return table.count();

好的,現在就來呼叫這個泛型方法:

type t = typelist[0];

methodinfo method = typeof(****class).getmethod(「gettablecount」);

methodinfo gmethod = method.makegenericmethod(t);

int result = (int)gmethod.invoke(null,null);

注意typeof裡面的是含有泛型方法的類名。這裡應該有乙個foreach來迭代這個容器的,就不寫了,看得明白就行。getmethod的引數是方法名,是字串型別的,用他來查詢這個方法,注意方法一定要是公共的才能找到。

用這樣的動態方法呼叫,感覺挺爽,但是除錯起來就比較麻煩,因為動態呼叫的方法中任何一條語句丟擲異常,vs都只會幫你定位到int result = (int)gmethod.invoke(null,null);這裡,所以要f11來找出拋異常那條語句。

ps:今天找bug的時候還發現乙個問題,就是不可以再外部沒有訂閱事件的情況下來激發乙個事件,不然就會拋異常~也就是說如果你激發乙個事件,你要保證一定要有乙個eventshandler來處理這個事件。

C 學習紀要 1 7月8日

注 暑假實習開始了。公司要的是c oh,yeah。來吧。c net,等你們好久了。哈哈。7月8日 星期三 天氣晴得不得了 今天已經是實習的第二天了。昨天懶得寫日誌,今天就開始補上吧。昨天做的事情包括 1.了解整個已開發系統的架構和模組。了解自己要做的模組的組成。2.初步完成資料庫連線配置窗體的設計和...

C 學習紀要 12 7月23日

7月23日 星期四 天氣晴 大暑啊。昨天下午偷懶了。什麼都沒寫就走人。主要因為昨天下午辛苦耕耘,終於將備份恢復嚮導模組的整體整合和測試工作做完了。今天早上花了乙個早上的時間將專案融合到團隊伺服器中,發現teamserver還挺難用的。終於弄完了,忙裡偷閒過來寫兩句,安排一下接下來的工作 首先,取消按...

7月9日 會議紀要

一.成員時間投入情況 侯松 暑假無其他專案 另加入了乙個團隊小組 範興鵬 7月10日 14日在北京,其餘時間ok 劉晗 一周3天實習,其餘時間ok 李蔚 每晚有2.5小時的時間投入 8月1日 11日除外 楊偲棟 7月可以投入80 以上的時間,8月投入50 的時間 餘欣緯 7月15日 31日修改 其餘...