首页 > 代码库 > c#通过反射移除所有事件
c#通过反射移除所有事件
移除全部事件委托
C# code ?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | 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 ; } |
c#通过反射移除所有事件
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。