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