委托和事件的区别与联系

1.可以认为委托就是一种特殊的类,委托类的对象可以保存对函数方法的一个或者多的引用,类似于C/C++中的函数指针,但是委托比函数指针可使用性更强。首先,函数指针只能指向静态函数,但是delegate都可以,其次delegate是面向对象的、类型安全的对象,也就是说运行时runtime能够保证delegate指向一个有效的方法,而不需要担心指向无效的地址或者地址越界等。

2.一个委托可以为其增加对多个方法的引用,通过+=、-=来实现,但是当委托为空时,必须先使用=为委托赋值(同时这里就暴露了仅使用委托的缺陷

3.事件,只能使用-=、+=来删减或者增加对方法的引用,不能使用=来直接修改事件中的内容,因而它能够有效的将委托封装起来。防止错误修改

4.事件是一个特殊的委托类型,委托 public delegate void MyEventHander(object sender,EventArgs e),其中sender是指传递事件的类,一般也就是事件触发的类(比如点击button出现很多弹窗,那么button类中就有button的点击事件,触发点击事件,传递button类),而EventArgs类是继承自System.EventArgs的一个自定义的类,用来保存事件发生时需要传递的一些信息,方便事件发生时,事件的监听者对信息进行处理(比如点击button的事件,EventArgs可能就会传递点击的位置等信息,而弹窗等就会接受到消息然后根据点击位置进行响应)

sender是事件源,表示触发事件的那个组件,比如说你按下按钮,那么sender就是按钮
EventArgs是事件参数,比如说你用鼠标点击窗体,那么EventArgs是会包含点击的位置等等,它用来辅助你处理事件。

发布了58 篇原创文章 · 获赞 7 · 访问量 3715

猜你喜欢

转载自blog.csdn.net/xy_learning/article/details/104615501