zoukankan      html  css  js  c++  java
  • 反射的一些基本用法

           反射用于做插件,获取一个封装的类的所有信息!都是挺方便的,下面就列举几个通过反射获取信息的方法:

           这次重新对反射内容进行添加,通过反射优化代码,这样使得项目逻辑变的更为清晰了

    反射的小案例(菜单的可配置化):http://www.cnblogs.com/fengxuehuanlin/p/5340580.html

         /// <summary>
            /// 获取当前类的所有字段信息
            /// </summary>
            /// <param name="obj"></param>
            public static void reflection(Object obj)
            {
                Type type = obj.GetType();
                IEnumerable<FieldInfo> fieldinfo = type.GetRuntimeFields();
                foreach (var item in fieldinfo)
                {
                    Console.WriteLine(item.GetValue(obj));//获取到了字段的所有信息
                }
            }
    /// <summary>
            /// 获取当前类的所有属性信息
            /// </summary>
            /// <param name="obj"></param>
            public static void reflection(Object obj)
            {
                Type type = obj.GetType();
                PropertyInfo[] proper = type.GetProperties();
                foreach (var item in proper)
                {
                    Console.WriteLine(item.Name);
                }
            }
     /// <summary>
            /// 获取当前类的所有公共方法
            /// </summary>
            /// <param name="obj"></param>
            public static void reflection(Object obj)
            {
                Type type = obj.GetType();
                MethodInfo[] proper = type.GetMethods();
                foreach (var item in proper)
                {
                    Console.WriteLine(item.Name);
                }
            }

       方法的执行: 

     /// <summary>
            /// 通过反射获取执行带参数的方法
            /// </summary>
            /// <param name="p1">类的对象</param>
            /// <param name="method">方法名</param>
            public static void getMethod(object p1,string method)
            {
                Type type = p1.GetType();
                MethodInfo methinfo = type.GetMethod(method,new Type[]{typeof(string)});
                if (methinfo == null)
                {
                    throw new Exception("该方法不存在");
                }
                methinfo.Invoke(p1, new object[] { method});
            }
     /// <summary>
            /// 通过反射获取执行不带参数的方法
            /// </summary>
            /// <param name="p1">类的对象</param>
            /// <param name="method">方法名</param>
            public static void getMethod(object p1,string method)
            {
                Type type = p1.GetType();
                MethodInfo methinfo = type.GetMethod(method);//这里要执行的方法没有参数,或者没有方法重载,这里的new Type[]{typeof(string)}可以省略
                if (methinfo == null)
                {
                    throw new Exception("该方法不存在");
                }
                methinfo.Invoke(p1, null);//因为是不带参数所以这里为null
            }
  • 相关阅读:
    MySQL 编码:utf8 与 utf8mb4,utf8mb4_unicode_ci 与 utf8mb4_general_ci
    用 Redis 实现 PHP 的简单消息队列
    C 语言跟 C++ 的差异比较
    Redis -主从复制
    Redis
    Linux 下在后台运行进程:nohup,setsid,& 以及 tmux
    Linux 下的分屏利器-tmux安装、原理及使用
    理财型保险-不值得购买的保险
    常见的保险产品类别-年金保险、意外险
    签订保险合同后的事-续保、批单、退保、理赔
  • 原文地址:https://www.cnblogs.com/fengxuehuanlin/p/5274607.html
Copyright © 2011-2022 走看看