目录
本篇文章来学习一下委托与事件的区别,以及它们之间的关系。
委托与事件的主要区别
1. 定义和本质
1)委托(Delegate):委托是一种数据类型,可以存储方法的引用,允许通过该引用调用方法,也允许通过 += 和 -= 操作符来添加或删除方法。简而言之,委托是一种数据类型,委托代表的是方法,当调用委托时就是调用了这个方法。
public delegate 返回类型 委托类型名(形参列表);
2)事件(Event):事件是一种特殊的委托,它基于委托,是委托的封装,确保外部代码不能直接更改事件的委托列表(即确保事件不能被直接赋值或修改),只能通过订阅 += 和取消订阅 -= 来操作事件。
public event 委托类型 事件名;
2. 可访问性
1)委托:委托对象是可以公开访问和修改的。任何持有委托实例的代码都可以直接调用它所绑定的方法。
2)事件:事件的委托实例仅能由事件的定义者(通常是类的发布者)触发,而不能由订阅者直接调用。订阅者只能添加或移除事件处理程序,但不能直接触发事件。
3. 修改与触发
1)委托:委托的实例可以随时被修改(通过 += 或 -=)和触发(通过调用委托实例)。外部代码可以通过赋值的方式将不同的方法绑定到同一个委托上,也可以直接触发这些方法。
2)事件:事件的委托实例不能直接修改。订阅者不能更改事件所绑定的委托对象,只能添加或移除事件处理程序(方法)。事件只能由定义事件的类触发,外部代码不能直接触发事件。
4. 目的与使用场景
1)委托:委托用于方法的引用,常用于回调函数、异步编程、方法参数传递等场景。委托可以在运行时动态调用不同的方法。
2)事件:事件用于实现发布-订阅模式,通常用于通知多个订阅者某个事件的发生。例如,按钮点击事件、文件上传完成事件等。