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

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

    二·委托

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

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

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

    三·事件

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

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

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

     

     

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

    1.定义

     

     

     

     

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

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

     

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

     

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

     

  • 相关阅读:
    204. Count Primes (Integer)
    203. Remove Linked List Elements (List)
    202. Happy Number (INT)
    201. Bitwise AND of Numbers Range (Bit)
    200. Number of Islands (Graph)
    199. Binary Tree Right Side View (Tree, Stack)
    198. House Robber(Array; DP)
    191. Number of 1 Bits (Int; Bit)
    190. Reverse Bits (Int; Bit)
    189. Rotate Array(Array)
  • 原文地址:https://www.cnblogs.com/lvqiang/p/12848596.html
Copyright © 2011-2022 走看看