很多人说C#的事件是一种特殊的委托,其实并不是,这是对事件的一种误解

C#  事件模型的五个组成部分

  1.事件的拥有者

  2.事件成员(事件的本身)

  3.事件响应者

  4.事件处理器:本质上是一种回调方法

  5.事件的订阅:谁响应谁订阅

导致这种误解的原因是:事件的触发是事件的拥有者完成了某个逻辑后通知事件的响应者,事件的响应者通过接收到的信息使用事件处理器(事件处理器本质是一个回调方法)对接收到的信息进行处理

           例如妈妈订阅了孩子饿了的事件和孩子迷路了的事件

           当孩子饿了,妈妈接收到了这个信息,然后妈妈去做饭

           当孩子迷路了,妈妈接收到这个信息,就得用相应的事件执行,得触发另一个事件,而不是继续做饭,例如开车去找孩子等。。如果妈妈接收孩子迷路了的这个信息,还是使用做饭这个方法,孩子不就丢了吗

因此,window系统不会让你随便订阅一个事件,把事件处理器与事件联系到一起,本质上是一种以委托类型为基础的“约定”

注意:

1.事件处理器是方法成员

2.挂接事件处理器的时候,可以使用委托实例,也可以使用方法名,这是个“语法糖”

3.事件的处理器对事件的订阅不是随意的,匹配与否由声明事件时所使用的委托类型来检测

4.事件可以同步调用,也可以异步调用

(不知道你们看不看得懂,主要是为了达到提醒自己这个目的)

最新文章

  1. 在VS中用正则表达式查找或替换
  2. Structs框架
  3. Unity3d使用UGUI实现长按功能
  4. background-image小解
  5. Windows线程漫谈界面线程和工作者线程
  6. Why does this json4s code work in the scala repl but fail to compile?
  7. CSS代码原则
  8. topngroupcollector
  9. LeetCode26 Remove Duplicates from Sorted Array
  10. Swift的字符串String是值类型
  11. APUE16章的运行示例16-14
  12. 2013中国大数据技术大会——BDTC2013
  13. 安装cocopods 更新ruby
  14. Echarts数据可视化地理坐标系geo,开发全解+完美注释
  15. Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 前言中不允许有内容。
  16. UDP广播-缓冲区过小
  17. java-多线程(下)&GUI
  18. 缓存淘汰算法---LRU转
  19. 发现一个好玩的东西 Web Scraper
  20. Linux 下建立 Git 与 GitHub 的连接

热门文章

  1. 从零学React Native之01创建第一个程序
  2. Python基础:21包装
  3. 第三期 预测——Frenet 坐标
  4. php中 array_filter函数 的总结
  5. supersockets接收过滤器(ReceiveFilter)
  6. Element-ui学习笔记2
  7. zoj 2338 The Towers of Hanoi Revisited
  8. 基于BERT预训练的中文命名实体识别TensorFlow实现
  9. iptables [-j target/jump] 常用的处理动作
  10. H3C 配置静态及动态域名解析