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 
                     { 
                     } 
                 } 
             }
  • 相关阅读:
    static变量的生命周期
    关于C++的new是否会对内存初始化的问题
    行列式的本质是什么?
    C++本质:类的赋值运算符=的重载,以及深拷贝和浅拷贝
    C++拷贝(复制)构造函数详解
    随机生成指定长度字符字符串(C语言实现)
    【npm】npm install的报错
    【HTTP】http请求url参数包含+号,被解析为空格
    【ngx-ueditor】百度编辑器按下Shift键不触发contentChange事件
    【Angular】No component factory found for ×××.
  • 原文地址:https://www.cnblogs.com/lujin49/p/2364187.html
Copyright © 2011-2022 走看看