event EventHandler vs EventHandler

6
在C#中,使用 event EventHandler<myeventargs>EventHandler<myeventargs> 是否有根本区别呢?就我所看到的,它们产生的效果相同,除了使用 event 关键字会在 IntelliSense 中给你一个不同的图标。

可能与https://dev59.com/ZnA75IYBdhLWcg3w7tx6重复。 - nevets
1
这里有一个类似于字段和属性之间的区别。如果您不使用event关键字并直接暴露委托对象,那么任何代码都可以做一些讨厌的事情,比如将其设置为null。 - Hans Passant
1个回答

6
他们看起来很相似,但实际上不同。
使用 event 关键字,你可以使它们更像属性,这意味着你可以在公共中注册它们,同时保持私有后端。
然而,如果没有 event 关键字,它只是一个公共委托字段,任何人都可以删除或修改其他人的事件,这是一个 "封装灾难",正如 @Jonskeet 所说。
查看 Jon Skeet 的 文章,非常有帮助 :) 编辑: 我总结的内容不是我原本的想法,所有功劳归于 @Jonskeet 的 帖子

2
你为什么不直接提供另一篇提到封装灾难的文章链接呢? - Yuliam Chandra
1
我认为简短的摘要比枯燥的链接更好,但是我的错误在于没有放置链接。 - nevets

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接