智者樂山山如畫, 仁者樂水水無涯。 從從容容一盃酒, 平平淡淡一盞茶。 細雨朦朧小石橋, 春風盪漾小竹筏。 夜無明月花獨舞, 腹有詩書气自華。 吾生有崖,也知無崖,以有崖逐無崖,殆也

移除全部事件委托

 public class Test
    {
        public event EventHandler AA;
        public void Foo()
        {
            if (AA != null) AA(this, new EventArgs());
        }
    }

static void Main(string[] args)
        {
            Test obj = new Test(); 
            obj.AA += delegate { Console.WriteLine("event raised."); }; 
            obj.Foo(); 
            RemoveEvent<Test>(obj, "AA"); 
            obj.Foo(); 
            Console.ReadKey();
        }

        static void RemoveEvent<T>(T c, string name)
        {
            Delegate[] invokeList = GetObjectEventList(c, "AA"); 
            foreach (Delegate del in invokeList) 
            { 
                typeof(T).GetEvent("AA").RemoveEventHandler(c, del); 
            }
        }
 
        ///  <summary>     
        /// 获取对象事件 zgke@sina.com qq:116149     
        ///  </summary>     
        ///  <param name="p_Object">对象 </param>     
        ///  <param name="p_EventName">事件名 </param>     
        ///  <returns>委托列 </returns>     
        public static Delegate[] GetObjectEventList(object p_Object, string p_EventName)
        {
            FieldInfo _Field = p_Object.GetType().GetField(p_EventName, BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static);
            if (_Field == null) 
            { 
                return null;
            } 
            object _FieldValue = _Field.GetValue(p_Object); 
            if (_FieldValue != null && _FieldValue is Delegate) 
            { 
                Delegate _ObjectDelegate = (Delegate)_FieldValue; 
                return _ObjectDelegate.GetInvocationList();
            } 
            return null;
        } 

 

posted @ 2014-05-06 13:54  後生哥哥  阅读(303)  评论(0编辑  收藏  举报
智者樂山山如畫, 仁者樂水水無涯。 從從容容一盃酒, 平平淡淡一盞茶。 細雨朦朧小石橋, 春風盪漾小竹筏。 夜無明月花獨舞, 腹有詩書气自華。 吾生有崖,也知無崖,以有崖逐無崖,殆也