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); } } 其主要用途是: >当您希望基于每个订户执行异常处理时>当委托返回值或更改状态时,您需要在每个订阅者的基础上处理该值 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |