加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

一个高效反射类

发布时间:2020-12-16 08:58:49 所属栏目:asp.Net 来源:网络整理
导读:1.项目中有需要用到反射的地方,仔细研究了下反射,其效率并不高 还好微软提供了IL的编程方法,自己实现了一个高效反射类 ? 下面举些常用例子: 我们反射出.NETFramework中的一个未公开的类 SessionStateUtility 并调用其私有方法 Deserialize 1 public stat

1.项目中有需要用到反射的地方,仔细研究了下反射,其效率并不高

还好微软提供了IL的编程方法,自己实现了一个高效反射类

?

下面举些常用例子:

我们反射出.NETFramework中的一个未公开的类 SessionStateUtility 并调用其私有方法 Deserialize

1 public static SessionStateStoreData Deserialize(HttpContext context,Stream stream)
2         {
3            DynamicMethodPrivoder _sessionStateUtility=new DynamicMethodPrivoder(typeof(SessionStateUtility),null);
5             return _sessionStateUtility.MethodInvoke("Deserialize",context,stream) as SessionStateStoreData;
6         }

注意:由于DynamicMethodPrivoder.Deserialize 是静态方法? 所以DynamicMethodPrivoder构造的第二个参数为null

?

我们反射出 HttpContext下的一个 HttpSessionStateContainer 对象中 的私有字段 _sessionItems并获取它的值

 SessionStateStoreData GetSessionStoreDate(HttpContext context)
3             IHttpSessionState container = SessionStateUtility.GetHttpSessionStateFromContext(context);
4             Type _containerType = typeof(HttpSessionStateContainer);
5             DynamicMethodPrivoder _containerPrivoder = new DynamicMethodPrivoder(_containerType,container);
6             ISessionStateItemCollection sessionItems = _containerPrivoder.Field(_sessionItems")  ISessionStateItemCollection;
7             HttpStaticObjectsCollection staticObjects = container.StaticObjects;
8             return  SessionStateStoreData(sessionItems,staticObjects,container.Timeout);
9         }


废话不多说了? 直接上源码:http://files.cnblogs.com/dint/DynamicMethodPrivoder.rar

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读