using System.Reflection; #region 反射方法 ////// 根据路径名称反射指定方法 /// /// 程序集名称 /// 类名称(从程序集开始索引,如:BLL.Demo.Demo) /// 方法名 /// 方法参数 /// public static string ReflectionMethodFromName(string AssemblyName, string ClassType, string MethodName, object[] Params) { try { Assembly assembly = Assembly.Load(AssemblyName); //加载程序集 Type t = assembly.GetType(ClassType); //参数必须是类的全名 object o = Activator.CreateInstance(t); //创建该类对象 MethodInfo mi = t.GetMethod(MethodName); //获取指定方法 object result = mi.Invoke(o, Params); //回调执行方法,并获取返回值 return result.ToString(); } catch(Exception ex){ throw ex; } } /// /// 根据路径名称反射类,获取类实例 /// /// 程序集名称 /// 类名称(从程序集开始索引,如:BLL.Demo.Demo) /// public static object ReflectionClassFromName(string AssemblyName, string ClassType) { try { Assembly assembly = Assembly.Load(AssemblyName); //加载程序集 Type t = assembly.GetType(ClassType); //参数必须是类的全名 object o = Activator.CreateInstance(t); //创建该类对象 return o; } catch (Exception ex) { throw ex; } } #endregion
注:Invoke的第一个参数为类实例,第二个参数为反射的方法的参数列表,如无参数直接传入null即可。
通过反射,可以通过参数动态的调用指定的方法,降低结构间的耦合性