反射的一些基本用法
反射用于做插件,获取一个封装的类的所有信息!都是挺方便的,下面就列举几个通过反射获取信息的方法:
这次重新对反射内容进行添加,通过反射优化代码,这样使得项目逻辑变的更为清晰了
反射的小案例(菜单的可配置化):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 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步