程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 巧用動態即時編譯實現公式的定義與計算

巧用動態即時編譯實現公式的定義與計算

編輯:.NET實例教程
需求提出
在業務系統的應用中,常需要定義計算公式。如:工資計算、設備折舊計算、招投標報價等。這些計算方案有一定的規律性,但對於目標客戶而言,又是非常個性化,設計並實現一個簡單、易用、配置性強的公式計算方案,是業務系統平台的一個重要的基礎功能。
目前很多業務系統實現的公式定義很多,功能也非常復雜、基本算術運算、統計公式,參數化定義等,應有盡有。這類公式定義器需要自己也很多的方法與功能,用來實現公式的動態編輯並校驗公式的正確性。本文提出的一種公式計算方法,是針對有基礎技術技能(懂C#語法)的簡單應用解決方法,它直接使用.Net動態編譯技術來實現,公式的校驗與公式的解析執行非常簡單,供大家學習參考。
基本原理
基本原理就是.Net動態即時編譯技術。動態編譯就是指在運行時動態生成類源代碼,執行編譯過程,返回編譯後的結果類,並執行類的相關操作。目前,動態即時編譯技術應用非常多,Java,.Net,JS腳本都支持動態編譯。典型的如:JavaScript中有名的 eval方法,直接將參數中的字符串編譯為可執行的方法,執行,並返回結果。
使用C#動態編譯的主要代碼如下:
ICodeCompiler  complIEr  =  (new  CSharpCodeProvider().CreateCompiler()); 
   //  設置編譯參數。 
   CompilerParameters  paras  =  new  CompilerParameters(); 
   paras.GenerateExecutable  =  false; 
   paras.GenerateInMemory  =  true; 
   // 動態創建代碼。 
   StringBuilder  classSrc =  new  StringBuilder();   
   classSrc.Append("public  class  "+  className  +"\n"); 
   …… 構造類源碼結構
   //  編譯代碼。 
   CompilerResults  result  =  complIEr.CompileAssemblyFromSource(paras,  classSrc.ToString()); 
   //  獲取編譯後的程序集。 
   Assembly  assembly  =  result.CompiledAssembly; 
   //  動態調用方法。 
   object  eval  =  assembly.CreateInstance(className); 
   MethodInfo  method  =  eval.GetType().GetMethod(methodName); 
   object reobj = method.Invoke(eval,  null); 
   return reobj;
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved