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
            }
  • 相关阅读:
    C#--事件驱动在上位机中的应用【一】(搭建仿真PLC环境)
    C#--事件驱动在上位机中的应用【三】(自定义控件)
    C#--事件驱动在上位机中的应用【二】(自定义控件)
    C#--属性--propfull和prop使用场所
    C#--通过Modbus TCP与西门子1200PLC通讯
    C#--简单调用WebService
    C#-- 简单新建WebService服务
    C#--发布WebService和部署IIS到本地服务器
    P1909 买铅笔
    P1089 津津的储蓄计划
  • 原文地址:https://www.cnblogs.com/fengxuehuanlin/p/5274607.html
Copyright © 2011-2022 走看看