C#反射的使用


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即可。

通過反射,可以通過參數動態的調用指定的方法,降低結構間的耦合性

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM