加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 检查现有的“有线”方法

发布时间:2020-12-16 00:19:19 所属栏目:百科 来源:网络整理
导读:我可能误解了一些基本的东西,因为我对这些概念不熟悉所以请耐心等待. 我正在从像这样的事件中删除方法: scheduleView.TouchDown -= scheduleView_TouchDown; 然后在其他场合 – 添加方法: scheduleView.TouchDown += scheduleView_TouchDown; 到目前为止一
我可能误解了一些基本的东西,因为我对这些概念不熟悉所以请耐心等待.

我正在从像这样的事件中删除方法:

scheduleView.TouchDown -= scheduleView_TouchDown;

然后在其他场合 – 添加方法:

scheduleView.TouchDown += scheduleView_TouchDown;

到目前为止一切正常,我可以理解可以添加几个方法,如下所示:

scheduleView.TouchDown += scheduleView_TouchDown;
scheduleView.TouchDown += scheduleView_AnotherTouchDownEventHandler;

但是,我后来如何检查哪些方法连接到此事件?

解决方法

有趣的是,你不能(至少从外面).事件只需提供2个访问者 – 添加和删除. CLI规范中定义了其他访问器方法,但它们不在C#或其他任何AFAIK中使用.关键点:我们不能要求事件订阅什么(实际上,我们不应该知道).您所能做的就是:添加或删除.

如果您担心双重订阅,请注意,如果您尝试取消订阅并且您实际上没有订阅,那么在每个理智的实现中,这只是一个无操作;这意味着你可以这样做:

// make sure we are subscribed once but **only** once
scheduleView.TouchDown -= scheduleView_TouchDown;
scheduleView.TouchDown += scheduleView_TouchDown;

从提升事件的代码的角度来看,你很少需要知道谁 – 简单地说:

// note I'm assuming a "field-like event" implementation here; otherwise,// change this to refer to the backing-field,or the delegate from the
// event-handler-list
var handler = TouchDown;
if(handler != null) handler(this,EventArgs.Empty); // or similar

还有一种方法可以将委托列表分解为单个订阅者,但很少需要:

var handler = TouchDown;
if(handler != null) {
    foreach(EventHandler subscriber in handler.GetInvocationList()) {
        subscriber(this,EventArgs.Empty);
    }
}

其主要用途是:

>当您希望基于每个订户执行异常处理时>当委托返回值或更改状态时,您需要在每个订阅者的基础上处理该值

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读