C#利用反射实现(js)Eval,asp(Execute)功能 动态执行类库中的函数
2008-11-26 13:14
1061 查看
今天在做一个功能是遇到一个问题,当我在程序运行时,我希望能够在通过指定方法的字符串就能够执行类库中的任何函数.在js中可以使用eval asp中可以使用Execute vb中好象也有eval.
在C#中好象就没有类似的功能(我在网上找了一下有人问这个问题但是似乎没有结果),
于是决定自己实现这个函数...
要给定函数字符串就执行函数,我们马上应该就会想到C#的反射机制,以前写过一篇关于反射修改对象属性的方法
这让我不禁想到了
using System.Reflection;命名空间包含提供加载类型、方法和字段的有组织的视图的类和接口,具有动态创建和调用类型的功能。
找找看果然有一个MethodInfo看到她成功就一半了 剩下就是实现了...
using System.Reflection;
namespace myCommon
{
public class CExecuteMethod
{
/// <summary>
/// 根据字符执行方法
/// </summary>
/// <param name="path">命名空间</param>
/// <param name="className">类名</param>
/// <param name="MethodName">方法名</param>
/// <param name="parameters">参数</param>
/// <returns>返回object类型</returns>
public static object Execute(string path,string className,string MethodName,params object[] parameters)
{
//动态从程序集中查找所需要的类并使用系统激活器创建实例最后获取它的Type
Type type=Assembly.Load(path).CreateInstance(path+"."+className).GetType();
//定义参数的个数,顺序以及类型的存储空间;
Type[] parametersLength;
if (parameters != null)
{
//如果有参数创建参数存储空间并依次设置类型
parametersLength = new Type[parameters.Length];
int i=0;
foreach (object obj in parameters)
{
parametersLength.SetValue(obj.GetType(),i);
i++;
}
}
else
{
//没有参数就为空
parametersLength = new Type[0];
}
//查找指定的方法
MethodInfo methodinfo = type.GetMethod(MethodName,parametersLength);
//如果是静态方法就执行(非静态我没试过)
if (methodinfo.IsStatic)
{
//调用函数
return methodinfo.Invoke(null, parameters);
}
return null;
}
}
}
如果大家有更好的方法多谢共享
在C#中好象就没有类似的功能(我在网上找了一下有人问这个问题但是似乎没有结果),
于是决定自己实现这个函数...
要给定函数字符串就执行函数,我们马上应该就会想到C#的反射机制,以前写过一篇关于反射修改对象属性的方法
这让我不禁想到了
using System.Reflection;命名空间包含提供加载类型、方法和字段的有组织的视图的类和接口,具有动态创建和调用类型的功能。
找找看果然有一个MethodInfo看到她成功就一半了 剩下就是实现了...
using System.Reflection;
namespace myCommon
{
public class CExecuteMethod
{
/// <summary>
/// 根据字符执行方法
/// </summary>
/// <param name="path">命名空间</param>
/// <param name="className">类名</param>
/// <param name="MethodName">方法名</param>
/// <param name="parameters">参数</param>
/// <returns>返回object类型</returns>
public static object Execute(string path,string className,string MethodName,params object[] parameters)
{
//动态从程序集中查找所需要的类并使用系统激活器创建实例最后获取它的Type
Type type=Assembly.Load(path).CreateInstance(path+"."+className).GetType();
//定义参数的个数,顺序以及类型的存储空间;
Type[] parametersLength;
if (parameters != null)
{
//如果有参数创建参数存储空间并依次设置类型
parametersLength = new Type[parameters.Length];
int i=0;
foreach (object obj in parameters)
{
parametersLength.SetValue(obj.GetType(),i);
i++;
}
}
else
{
//没有参数就为空
parametersLength = new Type[0];
}
//查找指定的方法
MethodInfo methodinfo = type.GetMethod(MethodName,parametersLength);
//如果是静态方法就执行(非静态我没试过)
if (methodinfo.IsStatic)
{
//调用函数
return methodinfo.Invoke(null, parameters);
}
return null;
}
}
}
如果大家有更好的方法多谢共享
相关文章推荐
- C#动态执行类库中的函数:利用反射实现(js)Eval,asp(Execute)功能
- C#动态执行函数:利用反射实现
- C#动态执行函数:利用反射实现
- 利用C#动态编译功能实现像Javascript中的Eval的功能来将一段字符串进行数学运算
- 如何在net中实现动态执行代码(js的eval)的功能?
- C#中实现js中的eval函数功能
- c#利用反射,实现将model类变成字符串、再还原成mode对象的功能
- 利用C#的反射机制动态调用DLL类库
- JScript 中 eval 实现 VBScript ExecuteGlobal 功能, 函数 fExecuteGlobal by shawl.qiu
- JS自定义功能函数实现动态添加网址参数修改网址参数值
- 使用eval()方法可以实现动态执行js
- ASP中利用execute实现动态包含文件的方法
- js中利用立即执行函数实现京东大小图切换
- [HTML/JS]利用JQuery的load函数动态加载其它页面的内容的实现代码代替Ifram
- [转]利用C#的反射机制动态调用DLL类库
- 行式填报表利用JS函数实现批量删除功能
- C#实现Eval函数功能
- 利用C#的反射机制动态调用DLL类库
- sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)
- js中eval函数动态执行语句