当前位置: 移动技术网 > IT编程>开发语言>c# > C#反射的使用

C#反射的使用

2019年08月01日  | 移动技术网IT编程  | 我要评论
注: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即可。

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

 

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网