C 中自定義方法,動態編譯,生成dll檔案

2022-03-12 11:00:16 字數 1160 閱讀 2043

最近研究從頁面手動編寫c#方法內容,並編譯生成dll檔案供其他使用者呼叫。在此做出簡單總結。

1.生成cs檔案。

這裡可以定義乙個cs檔案模板,當使用者頁面輸入方法具體內容後,將內容填充到模板中,這裡需要注意的是:自定義方法的返回值和傳入的引數理論上應該都是objec型別,因為在反射呼叫的時候,方法允許輸入的引數型別也是object的,所以,這裡你的方法不管定義的是何種類別的引數,最後傳入的都是object,同理,由於反射呼叫方法時,獲取到的方法返回值也同樣是object 的,所以我們自定義方法的返回值也應該是object 的,定義成其他格式的返回型別,不會在結果造成任何影響。

例如下:

private

object test(object

parm)

2.編譯並生成dll檔案。

方法定義完後,將方法具體內容插入模板中,並生成編譯,如果編譯通過,則生成dll檔案。編譯不通過,獲取錯誤資訊。

如: compilerresults result =debugrun(整個cs**, dll儲存路徑);

通過判斷 result.errors.count 是否為0,得出是否編譯通過。

//////

動態編譯並執行**

/// ///

** ///

返回輸出內容

public compilerresults debugrun(string code, string

newpath)

3.呼叫並驗證。

dll的呼叫,採用反射方法

assembly assembly =assembly.loadfile(dll生成路徑);

type atype =assembly.gettype(命名空間);

methodinfo method =atype.getmethod(方法名稱);

var t =method.returntype.name;

object parameters = new

object

;

var returnresult = convert.tostring(method.invoke(null

, parameters));

returnresult則為自定義方法返回值。

C 中自定義擴充套件方法

在c 中,我們在不寫子類的情況下,可以為類增加擴充套件方法,前提的被擴充套件的類不能使靜態類。步驟如下 定義乙個靜態 類以包含擴充套件方法。該類必須對客戶端 可見。有關可訪問性規則的更多資訊,請參見 訪問修飾符 c 程式設計指南 將該擴充套件方法實現為靜態方法,並使其至少具有與包含類相同的可見性。該...

C 自定義方法呼叫

自定義方法的呼叫 針對方法與呼叫者是否屬於同一c 類 方法是否有形參,可將方法的呼叫分為下面幾種形式 方法名 實參列表 呼叫屬於同乙個類的有形參方法 方法名 呼叫屬於同乙個類的無形參方法 方法所屬的類名.方法名 實參列表 呼叫屬於不同類的有 形參方法 方法所屬的類名.方法名 呼叫屬於不同類的無形參方...

C 中自定義異常

在寫方法時,是否遇見資料輸入的錯誤呢.如果字串格式不能轉換成整型的什麼.不過處理這些錯誤的異常,net已經都幫我們寫好了.但是如果乙個字串輸入你想判斷他是不是二進位制數.這種異常你會怎麼處理呢,返回乙個錯誤標識嗎?如果你寫的函式是二進位制轉換成十進位制 返回的值是整型.這個錯誤返回值如果標識呢.哈哈...