美文网首页
委托和事件

委托和事件

作者: _昨夜雨疏风骤 | 来源:发表于2017-06-19 22:14 被阅读0次

区别:

委托是类型,事件是对象;

事件内部就是一个private的委托和add、remove两个方法;

委托可以在声明它的类外部进行调用,而事件只能在类的内部进行调用。

视频:

http://v.youku.com/v_show/id_XODkyMzE0NzY0.html

委托总结:

委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用 If-Else(Switch)语句,同时使得程序具有更好的可扩展性。

注意这里,第一次用的“=”,是赋值的语法;第二次,用的是“+=”,是绑定的语法。如果第一次就使用“+=”,将出现“使用了未赋值的局部变量”的编译错误。

使用委托可以将多个方法绑定到同一个委托变量,当调用此变量时(这里用“调用”这个词,是因为此变量代表一个方法),可以依次调用所有绑定的方法。

事件:

事件的声明与之前委托变量delegate1的声明唯一的区别是多了一个event关键字。看到这里,你差不多明白到:事件其实没什么不好理解的,声明一个事件不过类似于声明一个委托类型的变量而已。

实际上尽管我们在GreetingManager里将 MakeGreet 声明为public,但是,实际上MakeGreet会被编译成私有字段,难怪会发生上面的编译错误了,因为它根本就不允许在GreetingManager类的外面以赋值的方式访问。

MakeGreet 事件确实是一个GreetingDelegate类型的委托,只不过不管是不是声明为public,它总是被声明为private。另外,它还有两个方法,分别是add_MakeGreet和remove_MakeGreet,这两个方法分别用于注册委托类型的方法和取消注册,实际上也就是: “+= ”对应 add_MakeGreet,“-=”对应remove_MakeGreet。而这两个方法的访问限制取决于声明事件时的访问限制符。

为什么需要事件?

事件最常用的应用场景是图形用户界面(GUI),如WinForm和WebForm,需要程序来对事件作出响应。可以是一个按钮点击事件,菜单选择事件,文件传输完成事件等。简单的说,某件事发生了,你必须要作出响应。你不能预测事件发生的顺序。只能等事件发生,再作出相应的动作来处理。

在GUI环境里面,所有的控件都能触发事件,如你点击按钮,触发点击(Click)事件,你在下拉列表中增加了项目,出发了列表改动(ListChanged)事件。

其他的类会对响应这些事件感兴趣。触发事件的类本身对怎样处理事件不感兴趣。按钮说:“我被点过了”,响应类(如Form或Page)作出合适的响应。

发布和订阅

所有的对象都能发布一系列事件供其他类订阅。当发布对象触发事件的时候,所有订阅的类都会被通知到。有了这种机制,你的对象可以说,“我要告诉你们一些事情”,其他的类会说“好的,告诉我们发生什么了”。比如,一个按钮被点击的时候会通知那些感兴趣的观察者。按钮称为发布者,因为按钮发布了点击事件。其他类是订阅者,因为它们订阅了点击事件。注意发布类不需要知道或关系谁订阅了;它只管触发事件。谁响应了事件,怎么响应的,发布类都不关心。

为什么更麻烦了?

:因为事件中保存了一个符合委托签名的函数列表。使得业务逻辑的传递更灵活了。

我使用事件没有你说的这么麻烦?

:因为微软设计WinForm或者WebForm时已经把第1,3,4,5步都放在发布类中做过了。我们只需要在订阅类中做第2步就行了,自然简单。

相关文章

  • 委托和事件

    区别: 委托是类型,事件是对象; 事件内部就是一个private的委托和add、remove两个方法; 委托可以在...

  • 委托和事件

    using System; using System.Collections.Generic; using Sys...

  • 委托和事件

    委托 委托是一个类,它定义了方法的类型,使得方法可以当做另一种方法的参数传递,就是方法的参数是一个委托变量,在调用...

  • jQuery事件委托和JS事件委托

    jQuery事件委托没得说,直接用on的方式在事件类型参数的后边加一个真正触发事件的对象即可,同时jQuery提供...

  • javascript事件委托和jquery事件委托

    元旦过后,新年第一篇。初衷:很多的面试都会涉及到事件委托,前前后后也看过好多博文,写的都很不错,写的各有千秋,自己...

  • 事件委托

    ------------------事件委托----------------- 事件: 事件委托: 原理: 冒泡 ...

  • 事件对象和事件委托

    事件对象事件发生的详细信息 在ie和chrome 事件详细信息保存到内置的 event对象中Event 对象代表事...

  • 事件冒泡和事件委托

    一、事件冒泡例1:html部分 js部分 解析:由代码结构可知,这是一个三层div嵌套结构,d1是d2的父级,d2...

  • 事件委托和事件对象

    事件委托((原理是事件冒泡)) 事件对象 在上面我们给事件处理函数一个参数e,他代表的就是事件对象,当事件发生时,...

  • DOM事件和事件委托

    捕获与冒泡 我们在点击 内容 这两个字的时候,都可以当做点击了one、two、three这三个(子元素被点击时也相...

网友评论

      本文标题:委托和事件

      本文链接:https://www.haomeiwen.com/subject/pamnqxtx.html