C#反射——简单反射操作类的封装
生活随笔
收集整理的這篇文章主要介紹了
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()[0];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
轉載于:https://www.cnblogs.com/threadj/p/10535796.html
總結
以上是生活随笔為你收集整理的C#反射——简单反射操作类的封装的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Django的自带认证系统——auth模
- 下一篇: Spring中的动态代理