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

ASP.NET
获取字符串数组的最后一段字符
asp.net遍历目录文件夹和子目录所有文件
ASP.NET 中文显示之两种解决方法
asp.net替换和恢复html特殊字符
asp.net简化接收参数值的函数
asp.net验证一个字符串是否符合指定的正则表达式
asp.net求3位不同数字的组合数
C#(.NET)数据访问连接、查询、插入等操作的封装类
在ASP.NET2.0中通过Gmail发送邮件的代码
asp.net下配置数据源时出现: 未将对象引用设置到对象的实例。
asp.net gridview强制换行
asp.net gridview多页时的批量删除
未处理的事件"PageIndexChanging" 之解决方案
gridview调整单元格宽度的方法
aspx如果引用cs中的变量的方法
asp.net导出EXCEL的功能代码
asp.net注册Javascript的方法
Asp.Net 文件操作基类
Asp.Net+XML操作基类(修改,删除,新增,创建)
asp.net 获取指定文件夹下所有子目录及文件(树形)

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 201 ::
收藏到网摘: 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; } }}
未完待续....