C#标准:“不提供公共事件成员变量”的理由?

时间:2011-04-07 14:58:42

标签: c# coding-style

IDesign编码标准声明“不提供公共事件成员变量。请改用事件访问器。”

我很欣赏有些情况下事件访问器很有用(我认为Control使用字典只存储分配给节省内存的事件)。但是强制要求这个样板代码始终存在的重点是什么?

编辑:明确

public event EventHandler EventName;

VS。

public event EventHandler EventName { add { ... } remove { ... } }

[见IDesign Coding Standard - 编码标准 - 42]

1 个答案:

答案 0 :(得分:3)

委托字段 不是事件 - 它们只是委托字段。它们可以(非常错误地)被外部调用者检查,调用和调用,而相反与事件的设计(通常只能由声明类处理)。

封装允许间接,验证等;都是可取的。而且成本很低。这会影响代码的性能,这是不正常的。

它还允许在 接口 上使用它们;字段不能在接口上声明。


编辑:

这个问题有点不清楚,但如果问题只是字段式事件vs使用委托支持者显式添加/删除......那么这是愚蠢的。不要添加不必要的代码。除非有足够的事件来保证EventHandlerList的实现,否则首选类似事件的事件。

特别是,4.0编译器现在非常明智地执行线程安全(历史上并非如此)。