zoukankan      html  css  js  c++  java
  • 清除一个对象所有事件所挂钩的delegate

    using System.Reflection; //需在添加 这个引用
     
    /// <summary> 
             
    /// 清除一个对象所有事件所挂钩的delegate 
             
    /// </summary> 
             
    /// <param>有事件的对象</param> 
             public static void ClearAllEvents(object objectHasEvents) 
             { 
                 if (objectHasEvents == null
                 { 
                     return
                 } 
                 EventInfo[] events = objectHasEvents.GetType().GetEvents( 
                     BindingFlags.Public | 
                     BindingFlags.NonPublic | 
                     BindingFlags.Instance); 
                 if (events == null || events.Length < 1
                 { 
                     return
                 } 
                 for (int i = 0; i < events.Length; i++) 
                 { 
                     try 
                     { 
                         EventInfo ei = events[i]; 
                         /******************************************************** 
                          * class的每个event都对应了一个同名的private的delegate类 
                          * 型成员变量(这点可以用Reflector证实)。因为private成 
                          * 员变量无法在基类中进行修改,所以为了能够拿到base 
                          * class中声明的事件,要从EventInfo的DeclaringType来获取 
                          * event对应的成员变量的FieldInfo并进行修改 
                          *******************************************************
    */ 
                         FieldInfo fi = 
                             ei.DeclaringType.GetField(ei.Name, 
                                                       BindingFlags.NonPublic | 
                                                       BindingFlags.Instance); 
                         if (fi != null
                         { 
                             // 将event对应的字段设置成null即可清除所有挂钩在该event上的delegate 
                             fi.SetValue(objectHasEvents, null); 
                         } 
                     } 
                     catch 
                     { 
                     } 
                 } 
             }
  • 相关阅读:
    PHP 把字符转换为 HTML 实体
    CSS 不换行 white-space 属性详解
    JQuery 事件器的介绍
    maven 添加自己的包
    MYSQL 安装
    优秀系统
    JSP中的相对路径和绝对路径(转)
    Eclipse RCP扩展
    JSTL与EL(转)
    el表达式跟ognl表达式的区别(转)
  • 原文地址:https://www.cnblogs.com/lujin49/p/2364187.html
Copyright © 2011-2022 走看看