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
            }
  • 相关阅读:
    强制表格内容不换行
    数组深度
    JDBC连接SQLService时报错误:“驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接"
    Excel中神奇的vlookup函数之基础应用
    利用python进行泰坦尼克生存预测——数据探索分析
    pandas数据处理基础——基础加减乘除的运算规则
    pandas数据处理基础——筛选指定行或者指定列的数据
    python读取文本文件数据
    服务器硬件基础知识
    WordPress实现伪静态
  • 原文地址:https://www.cnblogs.com/fengxuehuanlin/p/5274607.html
Copyright © 2011-2022 走看看