当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 利用.NET语言开发自己的脚本语言(一)

ASP.NET
Check if a File is in Internet Explorers Cache
如何检测电脑是否安装了.net framework
[Regex]Greta不支持“Named Groups”特性
使用子類化的方法來實現VB對特殊消息的響應
C#软件启动设计
C#中虛函數,抽象,接口的簡單説明
TreeView的操作
InteliIM 3.0 will be released soon!
如何將 Visual Basic 與 ADO 搭配使用
建立永遠停留在最上層的窗口(VB)
C#中比较两个值型一维数组变量是否值相等
谈谈软件工程设计的艺术
批量添加Active Directory帐号
文件搜索的实现(深度搜索)
一个图形分割问题[答网友]
XML反串行化Namespace不统一而引起的错误
使用Javascript创建XML文件
突破MsComm控件RThreshold限制,全部数据统统收!
如何制作一个带启动屏幕的窗体
【翻译】Managed DirectX(第五章)

ASP.NET 中的 利用.NET语言开发自己的脚本语言(一)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 53 ::
收藏到网摘: n/a


要利用.NET语言(例如:c# vb.net)开发自己的脚本语言必须实现2步:1.能够动态编译.NET 源代码2.动态调用.NET组件
首先我们介绍下动态条用.NET组件1.新建1个工程作为组件接口DynamicInterface创建新的类:using System;
namespace DynamicInterface{ public interface IDynamic { string getString(); }}
2.新建1个工程作为需要动态调用的组件DynamicClass引用DynamicInterface创建新的类:using System;
namespace DynamicCls{ public class DynamicClass:DynamicInterface.IDynamic //实现接口 { public DynamicClass() { } #region IDynamic 成员
public string getString() { // TODO: 添加 DynamicClass.getString 实现 return "Hello World Huhong"; }
#endregion }
3.新建1个工程来动态调用DynamicClassusing System;using System.Reflection;
using System.Threading;
namespace dynamicreference{ class DynamicReference { /// /// 应用程序的主入口点。 /// [STAThread] static void Main(string[] args) { string dllfilename=@"C:\DynamicClass.dll"; Thread.GetDomain().AssemblyLoad+=new AssemblyLoadEventHandler(DynamicReference_AssemblyLoad); Thread.GetDomain().AssemblyResolve+=new ResolveEventHandler(DynamicReference_AssemblyResolve); Assembly asm=System.Reflection.Assembly.LoadFile(dllfilename); Type type=asm.GetType("DynamicCls.DynamicClass",true); Object oh=Activator.CreateInstance(type); MethodInfo mi = type.GetMethod("getString"); Console.WriteLine(mi.Invoke(oh,null).ToString()); //利用反射机制运行 DynamicInterface.IDynamic id=(DynamicInterface.IDynamic)oh; //利用接口运行 Console.WriteLine(id.getString()); }

private static void DynamicReference_AssemblyLoad(object sender, AssemblyLoadEventArgs args) { Console.WriteLine("加载1个组件:"+args.LoadedAssembly.FullName ); }
private static Assembly DynamicReference_AssemblyResolve(object sender, ResolveEventArgs args) { Console.WriteLine("组件解析失败!"); return null; } }}
未完待续....