zoukankan      html  css  js  c++  java
  • 事件是一种委托吗?什么是委托?什么是事件?

    一·先直接回答下,事件不是委托,我们可以理解成他是委托的一个实例。

    二·委托

    我们可以把他理解成这样的一个对象,他包含相同签名和返回值类型的有序方法列表,也可以这样理解,他是可以把方法当做参数传递的一个类型(这些方法我们成为委托的方法列表)。

    从本质上来讲,他和int,string,类,结构等一样,是一种类型,并且他是引用类型。就像类一样,他也是需要声明并且new出一个对象的。

    那委托他是怎么工作的呢,简单来讲,我们调用委托的时候,委托去调用他包含的方法列表,这样我们会感觉到我们是“直接”调用了方法,其实不然。

    三·事件

    那什么是事件,为什么他会和委托混淆在了一起呢?很多人以为“事件是一种特殊的委托”,这是不负责任的,你凭什么这么认为呢?你的依据是什么呢?

    在我看来,二者根本没有可比性。

    如果你问我咸水和淡水有什么区别,我可以会理解你的疑惑,因为他们同属水这一类,但如果你问我咸水和盐有什么区别,我可能会被你气死,这有什么可比的呢?这根本就是你都不清楚这两样东西是什么吧?你就来问区别?事件和委托就好比是这样的。

     

     

     微软官方也很间接的告诉了我们,事件他和委托知识类似,为什么会类似呢?因为事件是包含了委托的。下面我们详细讲讲。

    1.定义

     

     

     

     

     1.同样是定义,我们可以看到委托它可以定义在类的外面,而事件只能定义在类的里面,并且微软很明确的提示你“ 命名空间不能直接包含字段或方法之类的成员 ”,其实这也说明了我将要说的,委托是一种类型,事件是一种成员。

    2.声明,我们可以在上面的图中看到,事件的声明用到的关键字“event”,但他在这个关键字后紧跟着的就是“EventHandler”,这个EventHandler是.NET BCL使用的,并被指定为事件使用标准的预定义委托类型。

     

     从这很明确的看出,EventHandler是一个委托(delegate),至此,我们应该明白,事件是委托类型的成员。

     

    含有一个方法的委托称为单播委托,含有一个以上的方法的委托称为多播委托,而事件就是建立在多播委托之上的。

     

  • 相关阅读:
    mac下mysql忘记了密码怎么办
    图片标签的四种路径
    三栏布局
    MongoDB学习笔记
    mysql B+ 树
    移动终端设备ID
    前端基础HTML以及常用的标签
    python--os模块
    python--基本数据 类型
    python基础3、4---流程控制、运算符
  • 原文地址:https://www.cnblogs.com/lvqiang/p/12848596.html
Copyright © 2011-2022 走看看