event 和delegate的分别
程序员文章站
2022-03-15 10:24:04
突然想起delegate委托是支持+= 和-=操作的,然后研究一下究竟这个是怎么做到的,好模仿一下。一开始以为是+=的运算符重载,但是在类库参考中并没有这个运算符重载,只有!= 和==运算符重载。有点纳闷,最终发现,原来+=这些直接就是语法层面的实现,只是针对delegate才有的福利,所以也不存在... ......
突然想起delegate委托是支持+= 和-=操作的,然后研究一下究竟这个是怎么做到的,好模仿一下。一开始以为是+=的运算符重载,但是在类库参考中并没有这个运算符重载,只有!= 和==运算符重载。有点纳闷,最终发现,原来+=这些直接就是语法层面的实现,只是针对delegate才有的福利,所以也不存在模仿的可能性了。
顺便就总结一下event事件和delegate委托的区别。这个区别有点类似字段和属性的不同。比如接口可以有属性,但是不能有字段。为什么?因为属性本质是方法,对字段进行了包装,这种包装有一点语法上的支持,在不同上下文下,会有不同的解释意义。
委托本质上是函数指针,是一个存储函数地址的变量,它很灵活,强大,这和字段一样,如果人们想要限制外部环境直接访问和控制委托,那么就可以通过event来达到这个目的。
当然,事件对委托的包装,添加了一层语义,那就是为了实现“事件模式”,如果你不想实现事件模式,那么就应该用普通函数来自定义这层包装。一般来说,事件的套路很适合程序员的需要。
delegate | event |
赋值= 取值= 添加回调函数+= 移除回调函数-= 调用() |
添加处理函数+= 移除处理函数-= (如果没有单独定义事件的委托,在内部,事件可以等同委托来用) |
因为委托可以绑定多个函数,那么它的返回值究竟是哪个?返回值是它绑定的最后一个回调函数。
上一篇: 西瓜播放器安装使用图文教程
下一篇: ViewController的生命周期
推荐阅读
-
js中获取键盘按下键值event.keyCode、event.charCode和event.which的兼容性详解
-
PHP和JavaScrip分别获取关联数组的键值示例代码
-
利用Angularjs和原生JS分别实现动态效果的输入框
-
对layui中的onevent 和event的使用详解
-
js jquery分别实现动态的文件上传操作按钮的添加和删除
-
AE和PS分别制作下雪的动画特效方法介绍
-
关于event.cancelBubble和event.stopPropagation()的区别介绍
-
菠菜和芹菜的营养价值分别是什么
-
洪武四大案分别是哪四件案子?洪武四大案的经过和结果是怎么样的?
-
IOS开发(45)之delegate和Notification的区别