1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Reflection;
  6.  
  7. namespace ReligionServer.util{
  8.  
  9. /// <summary>
  10. /// 反射工具类
  11. /// </summary>
  12. public class ReflectionUtil{
  13.  
  14. public static void MyInvoke(HttpContext context, Type type, String methodName) {
  15. try {
  16. //BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.Instance;
  17. BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic;
  18. MethodInfo method = type.GetMethod(methodName, bindingFlags);//反射获取公有和私有方法 默认获取公有方法
  19.  
  20. method.Invoke(Activator.CreateInstance(type, true), bindingFlags, Type.DefaultBinder, new object[] { context }, null);
  21. } catch (FormatException e) {
  22. handler.BaseHandler.Error<String>(context, new List<string>() { e.Message });
  23. } catch (TargetInvocationException e) {
  24. //handler.BaseHandler.Error<String>(context, new List<string>() { e.Message });
  25. } catch (Exception e) {
  26. //handler.BaseHandler.Error<String>(context, new List<string>() { e.Message });
  27. }
  28. }
  29.  
  30. /// <summary>
  31. /// 如果传递的type具有泛型形参, 那么返回泛型形参对象的实例, 否则返回当前type的实例
  32. /// </summary>
  33. /// <param name="type"></param>
  34. /// <returns></returns>
  35. public static Object Instance(Type type) {
  36. Type paramType = type.GetGenericArguments()[];
  37. type = paramType == null ? type : paramType;
  38. return Activator.CreateInstance(type, true);
  39. }
  40.  
  41. /// <summary>
  42. /// 获取所有方法(公有方法和私有方法)
  43. /// </summary>
  44. /// <param name="type"></param>
  45. /// <returns></returns>
  46. public static MethodInfo[] GetMethods(Type type) {
  47. BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic;
  48. return type.GetMethods(bindingFlags);
  49. }
  50.  
  51. /// <summary>
  52. /// 获取包括父类(但是除开Object)的所有字段
  53. /// </summary>
  54. /// <param name="type"></param>
  55. /// <returns></returns>
  56. public static List<FieldInfo> GetFileldS(Type type) {
  57. List<FieldInfo> list = new List<FieldInfo>();
  58. list.AddRange(type.GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static));
  59. while ((type = type.BaseType) != typeof(Object)) {
  60. list.AddRange(type.GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static));
  61. }
  62. return list;
  63. }
  64.  
  65. }
  66. }
  1. //调用反射执行方法
  2. protected void InitAction(HttpContext context) {
  3. String action = context.Request.Params["action"];
  4. if (action != null && action != "") {
  5. ReflectionUtil.MyInvoke(context, this.GetType(), action);
  6. } else {
  7. context.Response.ContentType = "text/plain";
  8. context.Response.Write("Action 参数不能为空...");
  9. }
  10. }

//这个是我在使用ashx处理程序的时候写的,一个ashx(一般处理程序)对应一个请求,我觉得一个请求一个文件不够优雅,所以就使用反射结合上传参数action(action:methodname)进行方法调用,以此来实现一个文件一个模块可多个请求的情况

Framework版本:.Net Framework 4

C#反射——简单反射操作类的封装的更多相关文章

  1. Java面向对象(类、封装)

    面向对象 今日内容介绍 u 面向对象 u 封装 第1章 面向对象 1.1 理解什么是面向过程.面向对象 面向过程与面向对象都是我们编程中,编写程序的一种思维方式. l 面向过程的程序设计方式,是遇到一 ...

  2. java---解析XML文件,通过反射动态将XML内容封装到一个类中

    本博客讲的XML解析,使用的是dom4j. 首先建立一个maven项目,在dom.xml中引入相应的dom4j的版本.作者下载的是热度很高的1.6.1版本.maven的使用在这里不做详细讲解. 引入成 ...

  3. 进阶Java编程(10)反射与简单Java类

    1,传统属性自动赋值弊端 简单Java类主要由属性构成,并且提供有setter与getter类,同时简单Java类最大的特征就是通过对象保存相应的类属性的内容.但是如果使用传统的简单Java类开发,那 ...

  4. java反射(四)--反射与简单java类

    一.传统简单java类 简单的java类主要是由属性所组成,并且提供有相应的setter以及getter的处理方法,同时简单java类最大的特征就是通过对象保存相应的类的属性内容,但是如果使用传统的简 ...

  5. java--分析简单java类与反射的联系

    分析简单java类与反射的联系 web对反射的操作支持 在JSP之中有一种技术--javaBean.而且在jsp里面也配套有相应的操作方式,javaBean的核心在于简单java类,于是下面演示此操作 ...

  6. c++的类的封装/继承/多态的简单介绍

    本篇文章仅仅从很表层来介绍一个C++语言中的类,包括什么是类,类的封装性/继承性和多态性.高手直接跳过吧,看了浪费时间,新手或者想温习一下的可以浏览看看. 1. 什么是类? 到底什么是类(class) ...

  7. Java反射+简单工厂模式总结

    除了 new 之外的创建对象的方法 通过 new 创建对象,会使得程序面向实现编程,先举个例子,某个果园里现在有两种水果,一种是苹果,一种是香蕉,有客户想采摘园子里的水果,要求用get()方法表示即可 ...

  8. Java反射初探 ——“当类也学会照镜子”

    反射的作用 开门见山地说说反射的作用   1.为我们提供了全面的分析类信息的能力 2.动态加载类   我理解的“反射”的意义 (仅个人理解哈)   我理解的java反射机制就是: 提供一套完善而强大的 ...

  9. Java反射简单使用--第一次细致阅读底层代码

    1:所写的东西都经过验证,保证正确,环境jdk8,eclipse2:在例子中,尽量以生产环境中实际代码为例,那种固定值什么的没什么意义 问题: 1:想获取调用方法所需要的参数 2:参数是以json形式 ...

随机推荐

  1. docker 配置文件:/etc/docker/daemon.json

    /etc/docker/daemon.json 是 docker 的配置文件,默认是没有的,需要我们手动创建,可配置项如下: [root@localhost ~]$ vim /etc/docker/d ...

  2. ContentPriver

    共享应用程序内的数据, 在数据修改时可以监听 1.特点 ①.可以将应用中的数据对外进行共享: ②.数据访问方式统一,不必针对不同数据类型采取不同的访问策略: ③.内容提供者将数据封装,只暴露出我们希望 ...

  3. Spring AOP教程及实例

    1.教程转载==>>:http://blog.csdn.net/wangpeng047/article/details/8556800 2.实例转载==>>:http://bl ...

  4. CSS美化自己的完美网页

    CSS美化自己的完美网页   CSS概述 css样式: css是英文Cascading Style Sheets的缩写,称为层叠样式表,用于对页面进行美化,CSS的可以使页面更加的美观.基本上所有的h ...

  5. 【PHP】 php实现字符串反转:支持中英文

    strrev  函数对英文很好用,直接可以实现字符串翻转 但是面对中文呢?肯定都是乱码,对于这样的问题有很多,比如strstr,substr等函数都是这样的. PHP提供了mb_类的函数实现不同编码. ...

  6. java基础---->java中Properties的使用

    Java中有个比较重要的类Properties(Java.util.Properties),主要用于读取Java的配置文件,各种语言都有自己所支 持的配置文件,配置文件中很多变量是经常改变的,这样做也 ...

  7. go练习5--生成md5

    import "crypto/md5" import "encoding/hex" //go 生成 md5 func T4_1() { m := md5.New ...

  8. mongodb实现对某列求和SUM

    mongodb数据如下: db.cpc_0103.find() { "a" : 8, "b" : "108177_200701010000" ...

  9. 170719、springboot编程之异步调用@Async

    1.在pom.xml中增加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artif ...

  10. C# WinForm实现任务栏程序图标闪烁

    相信大家在用QQ的时候都会知道,你打开了QQ聊天窗口,如果窗口不是当前激活的窗口的话,收到QQ消息时,任务栏(不是托盘图标)上的图标会闪一下变成黄色(Win7默认主题下),用以通知用户有消息进来了,之 ...