委托类型和事件处理程序类型有什么区别?

2024-03-29

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

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(使用前将#替换为@)

委托类型和事件处理程序类型有什么区别? 的相关文章

随机推荐

  • Java Swing 保存和加载工作区/设置

    我有一个 Java Swing 应用程序 其中包含一堆框架 而这些框架又主要包含显示大量数据的表格 由于在启动时安排所有窗口和表格总是很麻烦且耗时 因此我想实现 工作区 功能 以便用户可以保存首选项设置并在启动时选择自动将存储的工作区加载到
  • 找到未合并的 Git 分支?

    我有一个包含许多分支的 Git 存储库 其中一些已经合并 一些还没有 由于分支数量相当多 如何判断哪些分支尚未合并 我想避免必须进行 章鱼 合并和重新合并已经合并的分支 尝试这个 git branch merged master 它按照锡上
  • 为什么我的标签栏按钮无法在 iPad 上自动调整大小?

    我正在构建一个通用的 iOS 应用程序 iPad 版本使用 SplitViewController 在弹出视图中 我有一个带有两个按钮的 UITabBarController 当它在 iPhone 上运行时 TabBar 按钮正确拉伸以填充
  • MVC 3 中如何处理会话超时

    我遇到了频繁的会话超时问题 我想编写一个可以在每个控制器上使用的通用过滤器 过滤器应该重定向用户登录 并在登录后返回到用户发送最后一个请求的位置 你可以尝试这样的事情 public class SessionExpireAttribute
  • 错误 (407)“需要代理身份验证。”

    我有一个要求 比如 我想从 winforms 访问一个 url 登录页面 即 Web 我必须将凭据传递给该网址 并且响应应该是经过身份验证的网页 标记 的内容 我已经编写了一个函数 它将请求 url 并返回响应 但我收到错误代码 407 需
  • git Reset 文件和 git checkout 文件有什么区别?

    为什么 git 允许我重置文件 我以为我明白了reset 从某种意义上说 它正在移动头部 显然我错了 So git reset sha file似乎做同样的事情git checkout sha file 除了我看到的file在索引和工作目录
  • Kestrel 错误:地址已在使用中(dotnet 核心)

    摘要 它的工作原理是dotnet run 但它不起作用dotnet myappname dll 我的 Linux 技能有限 但我正在尝试按照书本进行操作 这样我就不会混淆事情 以下本教程 http www hanselman com blo
  • 在 iOS 14 中,Interface Builder 中设置的 UITextField backgroundColor 在运行时为零

    我有一个应用程序可以在 iOS 11 13 上正常运行 但是当我在 iOS 14 中运行它时 有几个其中的文本字段用零渲染 因此透明 背景颜色即使背景颜色在 Interface Builder 中明确设置为白色 我在代码中看不到任何使用可能
  • 如何在 PySide2 应用程序中嵌入 matplotlib 画布

    我正在尝试将 matplotlib 画布嵌入到 PySide2 应用程序中 我尝试使用这个例子 https matplotlib org examples user interfaces embedding in qt5 html http
  • 使用 bash 计算文件中每个单词的出现次数

    我想计算文件中每个单词的出现次数 但结果是错误的 bin bash usage count sh file declare a dict for word in cat 1 do if dict word then dict word 0
  • 在 Google 表格中两个数字之间的列中填写数字

    所以我试图填写 Google 表格中两个单元格之间的数字 我从 270 开始 在列中出现几个不确定且变化的空单元格后 我需要达到 180 我需要均匀地填充它们之间的单元格 但如何呢 如果您想将这些值粘贴到同一列中 您需要执行以下操作 那么公
  • Prolog - 递归列表构建

    对于我正在编写的程序 我需要创建一个列表列表 其中包含代表乘积的数字对和两个给定数字的总和 现在我有一个函数 我可以指定将列表添加到列表中的次数 稍后将使用完整功能进行扩展 这是我所拥有的 s1 0 X s1 Q X N is Q 1 mu
  • NFC 广播接收器问题

    我希望我的应用程序仅在激活时侦听 nfc 标签 为此 我尝试如下注册一个 nfc 侦听器 但没有成功 IntentFilter filter new IntentFilter android nfc action TECH DISCOVER
  • 使用查询生成器或 Eloquent 进行带有附加条件的 JOIN

    我正在尝试使用 Laravel 查询生成器的 JOIN 查询添加条件
  • Android 上的 Libgdx app.exit() 未关闭应用程序

    在我用 libGDX 开发的 Android 应用程序中 我使用Gdx app exit 当用户尝试退出游戏时 这会关闭游戏 但是当用户重新启动应用程序时 所有Textures被扰乱 超出了使用该应用程序的范围 我注意到 如果我从任务管理器
  • Haskell 中的垃圾 thunk 是否存在固有的“携带成本”?

    在运行 GHC 编译的程序时 我经常看到 GC 上花费了大量的周期 这些数字往往比我的 JVM 经验所建议的要高出一个数量级 特别是 GC 复制 的字节数似乎比我正在计算的数据量大得多 非语言和严格语言之间的这种差异是根本性的吗 tl dr
  • Cassandra 和 Tombstones:创建行、删除行、重新创建行 = 性能?

    有人可以解释一下 以下过程对墓碑有什么影响 1 使用键 1 创建 行 字段 用户 密码 日期 2 删除键为 1 的 行 3 使用键 1 创建 行 字段 用户 密码 登录计数 该序列在一个线程中按顺序执行 因此这种情况以相对较高的 速度 发生
  • 从 Ruby 类中调用方法? (或者这是 Rails 的魔法)

    我是 Ruby 新手 正在学习一些教程 截屏视频 我已经到达他们正在讨论的部分before filter回调 它使用了一些对我来说有点奇怪的语法 我不知道这是否是 ruby 的一个功能 或者它是否是一些 Rails 的魔法 希望这里有人可以
  • Google 电子表格脚本:调试图标已禁用

    这是我第一次尝试创建谷歌电子表格脚本 我正在关注这个教程 https developers google com apps script articles docslist tutorial section2 https developer
  • 委托类型和事件处理程序类型有什么区别?

    三个相关的惯用语 事件 委托 事件处理程序 我总是对谁 添加 到谁感到困惑 event handler event delegate handler delegate 据我所知 delegate 指向具有已知签名的函数的指针 事件处理程序