三个相关的惯用语:事件、委托、事件处理程序。我总是对谁“添加”到谁感到困惑。
event += handler
event += delegate
handler += delegate
据我所知:
- delegate:指向具有已知签名的函数的指针。
- 事件处理程序:注册到事件的委托。基本上,它与代表相同吗?
- event:使用 event() 调用事件时执行的委托\事件处理程序列表
更让我困惑的是MSDN中的这个签名:
public delegate void EventHandler(Object sender, EventArgs e)
“事件”实际上只是与委托一起使用的两种方法的快捷方式 -添加和删除访问器 http://msdn.microsoft.com/en-us/library/bb882534.aspx。默认情况下,编译器会在事件后面创建一个委托(如果您不编写自己的访问器)。
你打电话时someEvent += aDelegate;
,您正在调用该事件的add
访问器。通常,编译器将其翻译为delegate +=
调用与事件具有相同签名的委托 - 类似于自动属性如何自动映射到支持字段。这就是为什么事件看起来与委托如此相似。
更让我困惑的是MSDN中的这个签名:
公共委托 void EventHandler( 对象发送者, EventArgs e)
这个签名只是一个委托签名。从技术上讲,事件可以使用任何委托。但是,按照惯例,它始终采用两个参数 - 第一个是引发事件的“发送者”,第二个是派生自的类EventArgs
(like EventHandler
and EventHandler<T>
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)