c# - 委托(delegate)和事件之间的关系是什么?

标签 c# .net events delegates c++-cli

Delegate 完成与函数指针相同的工作。它可以被视为托管世界的函数指针。它只是表示要调用的函数的地址,以及要调用其方法的特定对象。

很多时候,我将术语Delegate 与术语Event 一起阅读,但我看不出它们之间的关系。 Event 是特定类型的委托(delegate)吗?

最佳答案

简答:参见 my article on the topic .更长的答案:

事件是委托(delegate)之上的一种模式。它们是 publisher/subscriber 的实现模式(又名 observer pattern ),使用委托(delegate)作为表示订阅的方式。

当你看到类似的东西时:

public event EventHandler Foo;

你应该考虑两种方法:

public void AddFooHandler(EventHandler handler) { ... }
public void RemoveFooHandler(EventHandler handler) { ... }

外部客户所能做的就是订阅和取消订阅。特别是,客户端不能自己引发事件(没有为此目的提供单独的方法),也不能“替换”或删除其他订阅。

关于c# - 委托(delegate)和事件之间的关系是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9487053/

相关文章:

c# - 如何从 linux 终端 (cloud9) 运行 .exe

c# - 使用 HTMLAgilityPack 选择具有属性数据 url 的元素

php - Symfony 2.4 : Why are 500 errors not caught by kernel. 异常监听器

C# 从网上下载文件

.net - 如何获取程序集的根命名空间?

java - onKeyDown 仅使用退格键触发

c++ - 如何单击 wxWidgets 处理程序 OnClose 中的按钮?

c# - 使用 BinaryFormatter 反序列化我的序列化数据时出现异常

c# - ubuntu 14.04 上的 Csharp 错误

c# - 通过 OLE 实现 Excel 自动化 - 抑制/捕获对话框错误?