日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#反射——简单反射操作类的封装

發布時間:2023/12/18 C# 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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#反射——简单反射操作类的封装的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。