反射的一些基本用法

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

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

反射的小案例(菜单的可配置化):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
        }
原文地址:https://www.cnblogs.com/fengxuehuanlin/p/5274607.html