註:Invoke的第一個參數為類實例,第二個參數為反射的方法的參數列表,如無參數直接傳入null即可。 通過反射,可以通過參數動態的調用指定的方法,降低結構間的耦合性 ...
using System.Reflection; #region 反射方法 /// <summary> /// 根據路徑名稱反射指定方法 /// </summary> /// <param name="AssemblyName">程式集名稱</param> /// <param name="ClassType">類名稱(從程式集開始索引,如:BLL.Demo.Demo)</param> /// <param name="MethodName">方法名</param> /// <param name="Params">方法參數</param> /// <returns></returns> 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; } } /// <summary> /// 根據路徑名稱反射類,獲取類實例 /// </summary> /// <param name="AssemblyName">程式集名稱</param> /// <param name="ClassType">類名稱(從程式集開始索引,如:BLL.Demo.Demo)</param> /// <returns></returns> 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即可。
通過反射,可以通過參數動態的調用指定的方法,降低結構間的耦合性