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形式 ...
随机推荐
- 用Broadcast Receiver刷新数据(二)
采用消息发布/订阅的一个很大的优点就是代码的简洁性,并且能够有效地降低消息发布者和订阅者之间的耦合度.举个例子,比如有两个界面,ActivityA和ActivityB,从ActivityA界面跳转到A ...
- Day04_数据类型占位符使用及进制转换
2013年10月09日 星期三 10时03分51秒 回顾: 1.变量 2.scanf标准函数 字符类型是一种数据类型 在C语言程序中字符类型用char表示 字符类型中包含了256个不同的字符,例如 ...
- Delphi 有关的网址
1. 博客园 (张志峰) http://www.cnblogs.com/zhangzhifeng/ 2. CSDN Delphi论坛 https://bbs.csdn.net/ ...
- LeetCode——Populating Next Right Pointers in Each Node
Description: Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; Tree ...
- LeetCode——Best Time to Buy and Sell Stock II
Description: Say you have an array for which the ith element is the price of a given stock on day i. ...
- redis未授权访问漏洞那拿SHELL
一.什么是redis未授权访问漏洞: 1.redis是一种文档型数据库,快速高效,存储在内存中,定期才会写磁盘.主要用于快速缓存,数据转存处理等.默认redis开在6379端口,可以直接访问.并不需要 ...
- java实现创建临时文件然后在程序退出时自动删除文件(转)
这篇文章主要介绍了java实现创建临时文件然后在程序退出时自动删除文件,从个人项目中提取出来的,小伙伴们可以直接拿走使用. 通过java的File类创建临时文件,然后在程序退出时自动删除临时文件.下面 ...
- [Android Tips] 30.如何在 Android Studio 中一次性格式化所有代码
在目录上面右击,有 Reformat Code Ctrl + Alt + L 参考 如何在IntelliJ IDEA或Android Studio中一次性格式化所有代码?
- ElementUI select
https://blog.csdn.net/qq_33769914/article/details/81738278 https://blog.csdn.net/m0_37972557/article ...
- Oracle涂抹oracle学习笔记第8章RMAN说,我能备份
本次测试服务器为172.16.25.33 使用rman连接本地数据库 rman target / 在rman中执行启动与关闭的命令与sqlplus相同 在rman中执行sql语句 sql ‘需要执行的 ...