gpt4 book ai didi

c# - 委托(delegate)类型和事件处理程序类型有什么区别?

转载 作者:太空狗 更新时间:2023-10-29 21:35:59 25 4
gpt4 key购买 nike

三个相关的习语:事件、委托(delegate)、事件处理程序。我总是对谁被“添加”到谁感到困惑。

event += handler
event += delegate
handler += delegate

据我所知:

  • 委托(delegate):指向具有已知签名的函数的指针。
  • 事件处理程序:注册到事件的委托(delegate)。基本上,它与代表一样吗?
  • 事件:使用 event() 调用事件时执行的委托(delegate)\事件处理程序列表

更让我困惑的是 MSDN 中的这个签名:

public delegate void EventHandler(Object sender, EventArgs e)

最佳答案

“事件”实际上只是两个使用委托(delegate)的方法的快捷方式 - add and remove accessors .默认情况下,编译器会在事件后面创建一个委托(delegate)(如果您不编写自己的访问器)。

当您调用 someEvent += aDelegate; 时,您正在调用事件的 add访问器(accessor)。通常,这会被编译器翻译成 delegate +=。调用与事件具有相同签名的委托(delegate)——类似于自动属性如何自动映射到支持字段。这就是事件看起来与委托(delegate)如此相似的原因。

what confuses me more is this signature in MSDN: public delegate void EventHandler( Object sender, EventArgs e)

此签名只是委托(delegate)签名。从技术上讲,事件可以使用任何委托(delegate)。但是,按照惯例,它将始终采用两个参数 - 第一个是引发事件的“发送者”,第二个是派生自 EventArgs 的类。 (如 EventHandlerEventHandler<T> )。

关于c# - 委托(delegate)类型和事件处理程序类型有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7335619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com