最近研究從頁面手動編寫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已經都幫我們寫好了.但是如果乙個字串輸入你想判斷他是不是二進位制數.這種異常你會怎麼處理呢,返回乙個錯誤標識嗎?如果你寫的函式是二進位制轉換成十進位制 返回的值是整型.這個錯誤返回值如果標識呢.哈哈...