C#学习教程:如何删除所有eventhandler分享


如何删除所有eventhandler

让我们说我们有一个代表

public delegate void MyEventHandler(string x); 

和一个事件处理程序

 public event MyEventHandler Something; 

我们添加了多个事件..

 for(int x = 0; x <10; x++) { this.Something += HandleSomething; } 

我的问题是..如何从事件处理程序中删除所有方法,假设一个人不知道它已被添加10次(或更多或更少)次?

只需将事件设置为null

 this.Something = null; 

它将取消注册所有事件处理程序。

作为伪想法:

C#5 <

 class MyDelegateHelperClass{ public static void RemoveEventHandlers(MulticastDelegate m, Expression> expr) { EventInfo eventInfo= ((MemberExpression)expr.Body).Member as EventInfo; Delegate[] subscribers = m.GetInvocationList(); Delegate currentDelegate; for (int i = 0; i < subscribers.Length; i++) { currentDelegate=subscribers[i]; eventInfo.RemoveEventHandler(currentDelegate.Target,currentDelegate); } } } 

用法:

  MyDelegateHelperClass.RemoveEventHandlers(MyDelegate,()=>myClass.myDelegate); 

C#6

 public static void RemoveEventHandlers(this MulticastDelegate m){ string eventName=nameof(m); EventInfo eventInfo=m.GetType().ReflectingType.GetEvent(eventName,BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic); Delegate[] subscribers = m.GetInvocationList(); Delegate currentDelegate; for (int i = 0; i < subscribers.Length; i++) { currentDelegate=subscribers[i]; eventInfo.RemoveEventHandler(currentDelegate.Target,currentDelegate); } } 

用法:

上述就是C#学习教程:如何删除所有eventhandler分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---猴子技术宅(www.ssfiction.com)

 MyDelegate.RemoveEventHandlers(); 

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/1269761.html

(0)
上一篇 1天前
下一篇 1天前

精彩推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注