程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#發現之旅第十四講 基於動態編譯的VB.NET腳本引擎(上)(6)

C#發現之旅第十四講 基於動態編譯的VB.NET腳本引擎(上)(6)

編輯:關於C語言

生成腳本代碼文本

VB.Net腳本引擎使用的動態編譯技術,而動態編譯技術的第一個部分就是代碼生成器 ,腳本大部分代碼都是由主程序提供的,因此其代碼生成器也就是將原始的腳本代碼進行一 些封裝而已。【袁永福原創,轉載請注明出處】

根據上述對運行時腳本的設計,用戶 可以導入其他的名稱空間,於是腳本引擎定義了SourceImports屬性來自定義導入的名稱空間 ,定義該屬性的代碼如下

/// <summary>
/// 源代碼中使用的 名稱空間導入
/// </summary>
private StringCollection  mySourceImports = new StringCollection();
/// <summary>
///  源代碼中使用的名稱空間導入
/// </summary>
public  StringCollection SourceImports
{
    get
    {
         return mySourceImports;
    }
}

在腳本引 擎的初始化過程中,程序會默認添加上System和Microsoft.VisualBasic兩個名稱空間。隨後 程序使用以下代碼來生成實際參與編輯的腳本代碼文本

// 生成編譯用的完整 的VB源代碼
string ModuleName = "mdlXVBAScriptEngine";
string nsName  = "NameSpaceXVBAScriptEngIEn";
System.Text.StringBuilder mySource =  new System.Text.StringBuilder();
mySource.Append("Option Strict Off");
foreach (string import in this.mySourceImports)
{
     mySource.Append(""r"nImports " + import);
}
mySource.Append (""r"nNamespace " + nsName);
mySource.Append(""r"nModule " +  ModuleName);
mySource.Append(""r"n");
mySource.Append (this.strScriptText);
mySource.Append(""r"nEnd Module");
mySource.Append(""r"nEnd Namespace");
string strRuntimeSource =  mySource.ToString();

這段代碼功能也比較簡單,首先輸出“Option Strick Off”語句,然後使用mySourceImports輸出若干個Imports語句。這裡的 mySourceImports是一個字符串列表,用於存放引用的名稱空間,比如“System” ,“Microsoft.VisualBasic”等等,用於組成VB.NET腳本的Imports語句。然後 輸出Namespace和Module代碼塊來包括了用戶提供的原始代碼文本。這裡的strSourceText就 是用戶提供的原始代碼文本。最後變量 strRuntimeSource中就包含了實際運行的VB.Net代碼 文本。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved