event 和delegate的分别
突然想起delegate委托是支持+= 和-=操作的,然后研究一下究竟这个是怎么做到的,好模仿一下。一开始以为是+=的运算符重载,但是在类库参考中并没有这个运算符重载,只有!= 和==运算符重载。有点纳闷,最终发现,原来+=这些直接就是语法层面的实现,只是针对delegate才有的福利,所以也不存在模仿的可能性了。
顺便就总结一下event事件和delegate委托的区别。这个区别有点类似字段和属性的不同。比如接口可以有属性,但是不能有字段。为什么?因为属性本质是方法,对字段进行了包装,这种包装有一点语法上的支持,在不同上下文下,会有不同的解释意义。
委托本质上是函数指针,是一个存储函数地址的变量,它很灵活,强大,这和字段一样,如果人们想要限制外部环境直接访问和控制委托,那么就可以通过event来达到这个目的。
当然,事件对委托的包装,添加了一层语义,那就是为了实现“事件模式”,如果你不想实现事件模式,那么就应该用普通函数来自定义这层包装。一般来说,事件的套路很适合程序员的需要。
delegate | event |
赋值= 取值= 添加回调函数+= 移除回调函数-= 调用() |
添加处理函数+= 移除处理函数-= (如果没有单独定义事件的委托,在内部,事件可以等同委托来用) |
因为委托可以绑定多个函数,那么它的返回值究竟是哪个?返回值是它绑定的最后一个回调函数。