我已经看过各种事件处理示例。这是一个:Event Sample。
有时我会看到在类之外声明的委托会引发事件(如上面的链接),有时也会在内部(其中我认为应该声明它)。
对于我来说,在内部声明将引发事件的类更有意义。原因是该类将声明的事件实际上只是辅助方法等的一些糖涂层,它们实际上正在添加,减去和调用委托等。
有没有最佳做法?是否有时候你想要在外面声明委托,有时你想在里面声明委托?如果是这样,应该如何决定该做什么?
答案 0 :(得分:19)
通常,这些天您创建自己的类派生自EventArgs
,然后只使用EventHandler<TEventArgs>
- 不需要创建单独的委托类型。因此,您使用AlarmEventHandler
代替EventHandler<AlarmEventArgs>
。 EventArgs
派生类通常应该是顶级的(即非嵌套的)。
答案 1 :(得分:6)
我会在外面宣布它们,因为它们也被其他类使用 - 事件的消费者。如果委托特定于此类,我会将委托保留在与该文件相同的文件中。
如果您使用.NET 2.0及更高版本中提供的EventHandler<TEventAgrs>
的通用版本,则不会出现问题,因为您只需要声明自定义EventArgs
。
答案 2 :(得分:2)
如果我没记错的话,CLR中很少有公共可访问的嵌套“对象”(classes / structs / delegates / enums)。因此,代表通常是班级的“外部”。
但是从.NET 3.5开始,一直有使用“通用”代理(Func<T>
,Action<T>
,Predicate<T>
)的想法,而不是越来越多的不兼容代表