C#动态执行函数:利用反射实现

来源:互联网 发布:程序员 app 编辑:程序博客网 时间:2024/06/01 13:54


转自:http://hi.baidu.com/lomasoft/item/c051dddb4cc5e7e954347f88

希望能够在通过指定方法的字符串就能够执行类库中的任何函数.在js中可以使用eval asp中可以使用Execute vb中好象也有eval. 
using System.Reflection;命名空间包含提供加载类型、方法和字段的有组织的视图的类和接口,具有动态创建和调用类型的功能。

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; 
     } 
   } 
}