C#中event和delegate的区别
2018-03-01 14:30 星门 阅读(3255) 评论(0) 编辑 收藏 举报event是一种特殊签名格式的delegate,event的定义必须在类内,delegate可以脱离类的存在。
event的引发是通过调用委托实现的,而委托不仅仅用来实现事件的引发。
通过加入event关键字,在编译的时候编译器会自动针对事件生成一个私有的字段(与此事件相关的委托),以及add_xxx和remove_xxx两个访问器方法。
虽然相关的操作通过delegate也能实现,但使用event更多是为了封装,event通常只能被申明的类访问,外部类对event只能使用+=或者-=,调用都不行。
如:
![](https://images2018.cnblogs.com/blog/1314038/201803/1314038-20180301142842634-1269852447.png)
可以直接被赋值,不利于封装。
当然在声明的类内,event可以做delegate一切可以做的事情
![](https://images2018.cnblogs.com/blog/1314038/201803/1314038-20180301142903648-714265914.png)
赋值不会报错。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步