zoukankan      html  css  js  c++  java
  • C# 为什么说事件是一种特殊的委托

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

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

      1.事件的拥有者

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

      3.事件响应者

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

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

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

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

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

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

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

    注意:

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

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

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

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

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

  • 相关阅读:
    02 _ 该如何选择消息队列
    封装、抽象、继承、多态分别可以解决哪些编程问题?
    04 _ 理论一:当谈论面向对象的时候,我们到底在谈论什么?
    03 _ 面向对象、设计原则、设计模式、编程规范、重构,这五者有何关系?
    接口使用
    结构体和方法
    通道的高级玩法
    通道的基本操作
    极客时间 mp3提取
    iOS多线程中的单例
  • 原文地址:https://www.cnblogs.com/FavoriteMango/p/12015460.html
Copyright © 2011-2022 走看看