C#中event和delegate的区别
2018-03-01 14:30 星门 阅读(3252) 评论(0) 编辑 收藏 举报event是一种特殊签名格式的delegate,event的定义必须在类内,delegate可以脱离类的存在。
event的引发是通过调用委托实现的,而委托不仅仅用来实现事件的引发。
通过加入event关键字,在编译的时候编译器会自动针对事件生成一个私有的字段(与此事件相关的委托),以及add_xxx和remove_xxx两个访问器方法。
虽然相关的操作通过delegate也能实现,但使用event更多是为了封装,event通常只能被申明的类访问,外部类对event只能使用+=或者-=,调用都不行。
如:
可以直接被赋值,不利于封装。
当然在声明的类内,event可以做delegate一切可以做的事情
赋值不会报错。