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

通过反射,可以通过参数动态的调用指定的方法,降低结构间的耦合性

 

posted @ 2019-08-01 14:45  我家的小萌珊  阅读(780)  评论(0编辑  收藏  举报