using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Reflection; namespace ReligionServer.util{ /// <summary>
/// 反射工具类
/// </summary>
public class ReflectionUtil{ public static void MyInvoke(HttpContext context, Type type, String methodName) {
try {
//BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.Instance;
BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic;
MethodInfo method = type.GetMethod(methodName, bindingFlags);//反射获取公有和私有方法 默认获取公有方法 method.Invoke(Activator.CreateInstance(type, true), bindingFlags, Type.DefaultBinder, new object[] { context }, null);
} catch (FormatException e) {
handler.BaseHandler.Error<String>(context, new List<string>() { e.Message });
} catch (TargetInvocationException e) {
//handler.BaseHandler.Error<String>(context, new List<string>() { e.Message });
} catch (Exception e) {
//handler.BaseHandler.Error<String>(context, new List<string>() { e.Message });
}
} /// <summary>
/// 如果传递的type具有泛型形参, 那么返回泛型形参对象的实例, 否则返回当前type的实例
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
public static Object Instance(Type type) {
Type paramType = type.GetGenericArguments()[];
type = paramType == null ? type : paramType;
return Activator.CreateInstance(type, true);
} /// <summary>
/// 获取所有方法(公有方法和私有方法)
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
public static MethodInfo[] GetMethods(Type type) {
BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic;
return type.GetMethods(bindingFlags);
} /// <summary>
/// 获取包括父类(但是除开Object)的所有字段
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
public static List<FieldInfo> GetFileldS(Type type) {
List<FieldInfo> list = new List<FieldInfo>();
list.AddRange(type.GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static));
while ((type = type.BaseType) != typeof(Object)) {
list.AddRange(type.GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static));
}
return list;
} }
}
//调用反射执行方法
protected void InitAction(HttpContext context) {
String action = context.Request.Params["action"];
if (action != null && action != "") {
ReflectionUtil.MyInvoke(context, this.GetType(), action);
} else {
context.Response.ContentType = "text/plain";
context.Response.Write("Action 参数不能为空...");
}
}

//这个是我在使用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. AsycnTask

    一.异步任务加载网络数据: 在Android中提供了一个异步任务的类AsyncTask,简单来说,这个类中的任务是运行在后台线程中的,并可以将结果放到UI线程中进行处理,它定义了三种泛型,分别是Par ...

  2. 多线程的学习与GDI的学习

    今天又是一周的周五,感觉过的好快,我感觉不是期盼周末的到来,而是感觉现在已经习惯啦每天坐在这里敲代码,其实我是一个性格非常开朗的女生,现在不知道为什么感觉默默地坐在自己位置上面敲代码成为了我习以为常的 ...

  3. php学习五:数组操作

    前言:由于之前接触过js,所以在学习php的时候,里面继承了js的许多方法,所以数组里面的许多操作和js很相似,但是却比js里面多的多,个人感觉php是集成数组方法最多的一个 ,今天学习的有二十余个, ...

  4. iOS 自动布局 Autolayout 优先级的使用

    一.约束的优先级 0.屏幕适配 发展历程 代码计算frame -> autoreszing(父控件和子控件的关系) -> autolayout(任何控件都可以产生关系) -> siz ...

  5. 【PHP】算法: 获取满足给定值的最优组合

    PHP 获取给定值的最优组合 方法 -   (蓝洛提供,博客地址: www.zhaorui.info) <?php ini_set('error_reporting','E_ALL^E_NOTI ...

  6. LNMP ftp 可以登录无权限操作?

    服务器环境: LNMP ftp : LNMP ftp一键安装 嘛卖批啊! 解决办法:  登录服务器.执行以下命令 chattr -i /home/wwwroot/default/.user.ini c ...

  7. LeetCode——Binary Search Tree Iterator

    Description: Implement an iterator over a binary search tree (BST). Your iterator will be initialize ...

  8. hihocoder [Offer收割]编程练习赛14 小Hi和小Ho的礼物

    题目1 : 小Hi和小Ho的礼物 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 某人有N袋金币,其中第i袋内金币的数量是Ai.现在他决定选出2袋金币送给小Hi,再选2袋 ...

  9. Python - 3.6 学习二

    Python 的高级特性 切片 对于指定索引范围取值的操作,Python提供了slice方法,类似于Excel中数据透视表的切片器. >>> L = ['Michael', 'Sar ...

  10. 310实验室OTL问题----将写好的C++文件转换成Python文件,并将数据可视化

    如图:文件夹 第一处:optimizer文件夹下的:optimizer.h文件中添加你所写代码的头文件  #include <OTL/Optimizer/Reference-NSGA-II/Re ...