C#动态执行类库中的函数:利用反射实现(js)Eval,asp(Execute)功能

今天在做一个功能是遇到一个问题,当我在程序运行时,我希望能够在通过指定方法的字符串就能够执行类库中的任何函数.在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;
     }
   }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值