利用CodeDom和反射動態編譯並執行程式集

2021-04-29 10:15:45 字數 1213 閱讀 9950

動態編譯,聽起來很酷,不是嗎?

1. 什麼是動態編譯

所謂動態編譯是由兩個字組成的:動態+編譯。很顯然,我們是想實現臨時地給出一段**,然後將其編譯成程式集(可以是在記憶體中,也可以是輸出乙個真正的dll)

2. 什麼時候需要用到動態編譯?

呃,這個問題有點難,簡單地說,就是要動態的時候啦。呵呵。我們有的時候需要提供系統這麼一種靈活性,即有的型別沒有辦法預先寫好,而是要根據情況動態編譯。這麼說吧,例如我們希望根據資料庫裡面乙個表的結構,動態編譯出來乙個對應的型別。

3. 如何使用動態編譯。下面是乙個很簡單的例子

using system.codedom;

using system.codedom.compiler;

using microsoft.csharp;

using system.reflection;

class program

} 我們還可以將編譯的結果儲存為乙個真正的dll。且看下面的**修改

有的朋友可能會疑惑,如果generateinmemory為true的話,是不是就真的不會有程式集產生呢?其實不然,其實它仍然會有乙個臨時的dll,在%temp%目錄下面,只不過使用完之後就被刪除了。

出處:http://blog.csdn.net/chen_xizhang

利用CodeDom來解決反射效能問題

前段時間在cnblogs看到了一編文章 利用emit減少反射的效能損失 原文 在編寫乙個資料處理元件時面對著這樣的問題,乙個反射操作所消耗的時間雖然很短 但在物件和資料換轉之間存在著大量的反射操作,大量反射操下效率就有點令人擔心.為了驗證這一點於是採用動態編譯操作物件來避開反射操作.基於方便容易用我...

利用反射動態呼叫類成員

使用反射動態呼叫類成員,需要type類的乙個方法 invokemember。對該方法的宣告如下 摘抄於msdn public object invokemember string name,bindingflags invokeattr,binder binder,object target,obj...

C 利用反射動態繫結事件

大多數時都是強型別,直接繫結事件,但這種耦合關係太強,在動態呼叫dll的時候就不太合適了。以下是動態繫結和直接繫結的乙個簡單例項 1 using system 2using system.collections.generic 3using system.linq 4using system.tex...