C#发现之旅:于动态编译的VB.NET脚本引擎(上)
2010-09-30 21:08:18 来源:WEB开发网如上所述,借助于StandardModuleAttribute特性和编译器命令行参数imports,笔者就可以实现VB.NET的全局对象和全局函数了。
根据上述说明,笔者设计如下的参与动态编译的VB.NET脚本代码的结构
Option Strict Off
Imports System
Imports Microsoft.VisualBasic
Namespace NameSpaceXVBAScriptEngien
Module mdlXVBAScriptEngine
sub 脚本方法1()
'VB.NET代码
end sub
sub 脚本方法2()
'VB.NET代码
end sub
End Module
End Namespace
其中斜体部分就是用户提供的原始脚本代码,而开头和结尾部分是脚本引擎自动添加的,这样能减少脚本引擎的使用难度。
在脚本引擎自动添加的代码中使用了Imports语句引入的名称空间,默认添加了System和Microsoft.VisualBasic两个名称空间,为了方便使用,可以让用户添加其他的名称空间,比如脚本代码中大量使用了System.Drawing名称空间,则可以使用Imports语句导入System.Drawing名称空间来减少脚本代码量。
软件开发
笔者新建一个XVBAEngine类型,该类型实现了脚本引擎的功能。脚本引擎包含了参数控制属性,代码生成器,动态编译,分析和调用临时程序集等几个子功能。
参数控制属性
笔者为脚本引擎类型定义了几个属性用于保存脚本引擎运行所必备的基础数据。这些属性中最重要的属性就是用户设置的原始脚本代码文本。定义该属性的代码如下
/// <summary>
/// 脚本代码改变标记
/// </summary>
private bool bolScriptModified = true;
/// <summary>
/// 原始的VBA脚本文本
/// </summary>
private string strScriptText = null;
/// <summary>
/// 原始的VBA脚本文本
/// </summary>
public string ScriptText
{
get
{
return strScriptText;
}
set
{
if (strScriptText != value)
{
bolScriptModified = true;
strScriptText = value;
}
}
}
更多精彩
赞助商链接