net支援反射功能以後,確實使我們net程式眼前一亮啊,真是太神奇了,只需要傳入字串就可以完成功能.可以說,反射功能的引入,使我們在處理某些問題上更加得心應手.
傳統的db管理軟體中,資料庫欄位的頻繁改動,前台實體類的不斷修改,使我們大為頭痛.並不是說我們設計的db結構不合理,而且客戶的需求變動十分頻繁,而且非常不可控,當然,如果對行業業務非常精通的話,是可以避免這個問題的.
使用反射功能,雖然可以傳入字串來解決某些問題,但如果遇到上述提到的資料庫字段增刪的問題,我們常用的方法是寫入給客戶公升級的sql語句,然後在公司修改某個dll檔案中的實體類以後,重新編譯,打包測試通過後.將前台dll檔案和後台sql語句一併發至各戶處,實施員或客戶的系統管理員將最新的檔案覆蓋,sql語句生成,反射功能我們在生成實體類物件時會用到.
整個過程基本如此,其中,重新生成dll檔案的步驟,如果採用動態編譯的方法處理,似乎就變得簡單多了.大致思路如下
1. 修改db表結構的步驟依舊沒有變化.
2. 生成dll檔案,採用動態編譯.即在系統開啟時,根據db中的物件生成實體類,再直接編譯生成dll檔案,與上個方法相比,編譯dll的過程由系統自動執行了,而不需要我們在公司編譯.這樣我們只需要保證sql語句公升級正確就可以了.
3. 根據生成好的dll檔案,我們再使用反射就ok了
圖-1我們再看看是如何使用這個方法來編譯檔案的,我們現在實現這樣乙個業務,客戶需要新增加一張表,對應的實體也要增加,並實現實體的增刪改查操作.如圖-2所示,首先要製作好實體類的字串
圖-2然後直接編譯即可,如果編譯成功,我們就直接可以使用反射對其操作了.如圖-3所示
圖-3效果怎麼樣?這樣處理的話,如果再遇到類似需求,我們需要做的事情,就是提供字串就可以了,而不需要在公司生成dll,由實施員負責覆蓋.
技術的更新,會使我們在處理某些問題上變得更加容易和簡單.
原始檔反射已經out動態編譯才能hold住.files
反射帶有out引數的方法
public int getflag out int result 使用下面的方法來反射 system.type mytype typeof testreflection 反射生成改型別的物件例項 object obj mytype.invokemember null,bindingflags.cr...
利用CodeDom和反射動態編譯並執行程式集
動態編譯,聽起來很酷,不是嗎?1.什麼是動態編譯 所謂動態編譯是由兩個字組成的 動態 編譯。很顯然,我們是想實現臨時地給出一段 然後將其編譯成程式集 可以是在記憶體中,也可以是輸出乙個真正的dll 2.什麼時候需要用到動態編譯?呃,這個問題有點難,簡單地說,就是要動態的時候啦。呵呵。我們有的時候需要...
C 反射與編譯
首先了解下,如何區分編譯生成的 dll的版本 方法1 ilspy反編譯工具 通過 assembly屬性,release版本沒有或僅有如下一種屬性 assembly debuggable debuggableattribute.debuggingmodes.ignoresymbolstoreseque...