
获得徽章 0
【解答】c# 事件和委托有些什么区别,求大神浅显易懂地解释一下?
委托和事件是高级编程语言的一座特大山峰,我自己去理解以及解释给别人听,都尝试过无数次,这次是我感觉解释的比较简单明了的一次,兄弟们欣赏一下?!
委托有两面。其中一面好理解,你按JS函数表达式去理解,函数可以当作参数和返回值,基本就抓住要点了。
委托还有另外一面,叫作多播。如果我们把委托变成一个类的成员,就可以实现一些非常神奇的事情。比如类A有一个委托类型成员SomeEvent,我们就叫它事件吧,同时定义一个发布事件的方法EmitSomeEvent。我在类B内,实例化A(a),然后给事件多播几个方法,像这样a.SomeEvent+=SomeHandler,我们叫它订阅事件,SomeHandler是一个回调方法。那么,我们发布事件a.EmitSomeEvent,就能神奇的触发B上的回调方法了。
然后再回想一下,你在UI框架中,是怎么为Button的Click绑定回调方法的?Button就是类A,Click就是它的事件,Button是在哪里实例化的?在用它的当前类里面,也就是类B。
事件就是利用委托的多播机制,实现了发布和订阅的解耦。上面的逻辑里,其实还有一个问题没有解释,就是Click事件是谁发布以及如何发布的?这就涉及UI框架的内部机制了,具体咋实现咱不知道,只要明白UI框架捕捉到了用户点击动作,然后就发布了Click事件,进而触发了订阅它的回调方法。
委托和事件是高级编程语言的一座特大山峰,我自己去理解以及解释给别人听,都尝试过无数次,这次是我感觉解释的比较简单明了的一次,兄弟们欣赏一下?!
委托有两面。其中一面好理解,你按JS函数表达式去理解,函数可以当作参数和返回值,基本就抓住要点了。
委托还有另外一面,叫作多播。如果我们把委托变成一个类的成员,就可以实现一些非常神奇的事情。比如类A有一个委托类型成员SomeEvent,我们就叫它事件吧,同时定义一个发布事件的方法EmitSomeEvent。我在类B内,实例化A(a),然后给事件多播几个方法,像这样a.SomeEvent+=SomeHandler,我们叫它订阅事件,SomeHandler是一个回调方法。那么,我们发布事件a.EmitSomeEvent,就能神奇的触发B上的回调方法了。
然后再回想一下,你在UI框架中,是怎么为Button的Click绑定回调方法的?Button就是类A,Click就是它的事件,Button是在哪里实例化的?在用它的当前类里面,也就是类B。
事件就是利用委托的多播机制,实现了发布和订阅的解耦。上面的逻辑里,其实还有一个问题没有解释,就是Click事件是谁发布以及如何发布的?这就涉及UI框架的内部机制了,具体咋实现咱不知道,只要明白UI框架捕捉到了用户点击动作,然后就发布了Click事件,进而触发了订阅它的回调方法。
展开

评论
点赞