C#反射——简单反射操作类的封装
- 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#反射——简单反射操作类的封装的更多相关文章
- Java面向对象(类、封装)
面向对象 今日内容介绍 u 面向对象 u 封装 第1章 面向对象 1.1 理解什么是面向过程.面向对象 面向过程与面向对象都是我们编程中,编写程序的一种思维方式. l 面向过程的程序设计方式,是遇到一 ...
- java---解析XML文件,通过反射动态将XML内容封装到一个类中
本博客讲的XML解析,使用的是dom4j. 首先建立一个maven项目,在dom.xml中引入相应的dom4j的版本.作者下载的是热度很高的1.6.1版本.maven的使用在这里不做详细讲解. 引入成 ...
- 进阶Java编程(10)反射与简单Java类
1,传统属性自动赋值弊端 简单Java类主要由属性构成,并且提供有setter与getter类,同时简单Java类最大的特征就是通过对象保存相应的类属性的内容.但是如果使用传统的简单Java类开发,那 ...
- java反射(四)--反射与简单java类
一.传统简单java类 简单的java类主要是由属性所组成,并且提供有相应的setter以及getter的处理方法,同时简单java类最大的特征就是通过对象保存相应的类的属性内容,但是如果使用传统的简 ...
- java--分析简单java类与反射的联系
分析简单java类与反射的联系 web对反射的操作支持 在JSP之中有一种技术--javaBean.而且在jsp里面也配套有相应的操作方式,javaBean的核心在于简单java类,于是下面演示此操作 ...
- c++的类的封装/继承/多态的简单介绍
本篇文章仅仅从很表层来介绍一个C++语言中的类,包括什么是类,类的封装性/继承性和多态性.高手直接跳过吧,看了浪费时间,新手或者想温习一下的可以浏览看看. 1. 什么是类? 到底什么是类(class) ...
- Java反射+简单工厂模式总结
除了 new 之外的创建对象的方法 通过 new 创建对象,会使得程序面向实现编程,先举个例子,某个果园里现在有两种水果,一种是苹果,一种是香蕉,有客户想采摘园子里的水果,要求用get()方法表示即可 ...
- Java反射初探 ——“当类也学会照镜子”
反射的作用 开门见山地说说反射的作用 1.为我们提供了全面的分析类信息的能力 2.动态加载类 我理解的“反射”的意义 (仅个人理解哈) 我理解的java反射机制就是: 提供一套完善而强大的 ...
- Java反射简单使用--第一次细致阅读底层代码
1:所写的东西都经过验证,保证正确,环境jdk8,eclipse2:在例子中,尽量以生产环境中实际代码为例,那种固定值什么的没什么意义 问题: 1:想获取调用方法所需要的参数 2:参数是以json形式 ...
随机推荐
- docker 配置文件:/etc/docker/daemon.json
/etc/docker/daemon.json 是 docker 的配置文件,默认是没有的,需要我们手动创建,可配置项如下: [root@localhost ~]$ vim /etc/docker/d ...
- ContentPriver
共享应用程序内的数据, 在数据修改时可以监听 1.特点 ①.可以将应用中的数据对外进行共享: ②.数据访问方式统一,不必针对不同数据类型采取不同的访问策略: ③.内容提供者将数据封装,只暴露出我们希望 ...
- Spring AOP教程及实例
1.教程转载==>>:http://blog.csdn.net/wangpeng047/article/details/8556800 2.实例转载==>>:http://bl ...
- CSS美化自己的完美网页
CSS美化自己的完美网页 CSS概述 css样式: css是英文Cascading Style Sheets的缩写,称为层叠样式表,用于对页面进行美化,CSS的可以使页面更加的美观.基本上所有的h ...
- 【PHP】 php实现字符串反转:支持中英文
strrev 函数对英文很好用,直接可以实现字符串翻转 但是面对中文呢?肯定都是乱码,对于这样的问题有很多,比如strstr,substr等函数都是这样的. PHP提供了mb_类的函数实现不同编码. ...
- java基础---->java中Properties的使用
Java中有个比较重要的类Properties(Java.util.Properties),主要用于读取Java的配置文件,各种语言都有自己所支 持的配置文件,配置文件中很多变量是经常改变的,这样做也 ...
- go练习5--生成md5
import "crypto/md5" import "encoding/hex" //go 生成 md5 func T4_1() { m := md5.New ...
- mongodb实现对某列求和SUM
mongodb数据如下: db.cpc_0103.find() { "a" : 8, "b" : "108177_200701010000" ...
- 170719、springboot编程之异步调用@Async
1.在pom.xml中增加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artif ...
- C# WinForm实现任务栏程序图标闪烁
相信大家在用QQ的时候都会知道,你打开了QQ聊天窗口,如果窗口不是当前激活的窗口的话,收到QQ消息时,任务栏(不是托盘图标)上的图标会闪一下变成黄色(Win7默认主题下),用以通知用户有消息进来了,之 ...