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
            }
  • 相关阅读:
    J
    I题
    H
    G
    F题
    E题
    D题
    C题
    B题
    A题
  • 原文地址:https://www.cnblogs.com/fengxuehuanlin/p/5274607.html
Copyright © 2011-2022 走看看