zoukankan      html  css  js  c++  java
  • 一个高效反射类

    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并获取它的值

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


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

  • 相关阅读:
    [原]OS X 10.9 Mavericks
    [原]iOS Makefile Template
    [原]Escape From the iOS Sanbox on Jailbreak Device
    串->串的表示和实现
    队列->队列的应用(银行业务模拟)
    队列->队列的表示和实现
    栈->栈与递归
    栈->栈的应用
    栈->栈的基本定义
    线性表->应用->一元多项式
  • 原文地址:https://www.cnblogs.com/dint/p/4170056.html
Copyright © 2011-2022 走看看