C# 为什么说事件是一种特殊的委托
2024-10-08 05:01:49
很多人说C#的事件是一种特殊的委托,其实并不是,这是对事件的一种误解
C# 事件模型的五个组成部分
1.事件的拥有者
2.事件成员(事件的本身)
3.事件响应者
4.事件处理器:本质上是一种回调方法
5.事件的订阅:谁响应谁订阅
导致这种误解的原因是:事件的触发是事件的拥有者完成了某个逻辑后通知事件的响应者,事件的响应者通过接收到的信息使用事件处理器(事件处理器本质是一个回调方法)对接收到的信息进行处理
例如妈妈订阅了孩子饿了的事件和孩子迷路了的事件
当孩子饿了,妈妈接收到了这个信息,然后妈妈去做饭
当孩子迷路了,妈妈接收到这个信息,就得用相应的事件执行,得触发另一个事件,而不是继续做饭,例如开车去找孩子等。。如果妈妈接收孩子迷路了的这个信息,还是使用做饭这个方法,孩子不就丢了吗
因此,window系统不会让你随便订阅一个事件,把事件处理器与事件联系到一起,本质上是一种以委托类型为基础的“约定”
注意:
1.事件处理器是方法成员
2.挂接事件处理器的时候,可以使用委托实例,也可以使用方法名,这是个“语法糖”
3.事件的处理器对事件的订阅不是随意的,匹配与否由声明事件时所使用的委托类型来检测
4.事件可以同步调用,也可以异步调用
(不知道你们看不看得懂,主要是为了达到提醒自己这个目的)
最新文章
- 在VS中用正则表达式查找或替换
- Structs框架
- Unity3d使用UGUI实现长按功能
- background-image小解
- Windows线程漫谈界面线程和工作者线程
- Why does this json4s code work in the scala repl but fail to compile?
- CSS代码原则
- topngroupcollector
- LeetCode26 Remove Duplicates from Sorted Array
- Swift的字符串String是值类型
- APUE16章的运行示例16-14
- 2013中国大数据技术大会——BDTC2013
- 安装cocopods 更新ruby
- Echarts数据可视化地理坐标系geo,开发全解+完美注释
- Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 前言中不允许有内容。
- UDP广播-缓冲区过小
- java-多线程(下)&;GUI
- 缓存淘汰算法---LRU转
- 发现一个好玩的东西 Web Scraper
- Linux 下建立 Git 与 GitHub 的连接