是否应该在提升活动的课堂内或在外面宣布代表?

时间:2011-03-13 08:14:18

标签: c# .net events delegates

我已经看过各种事件处理示例。这是一个:Event Sample

有时我会看到在类之外声明的委托会引发事件(如上面的链接),有时也会在内部(其中认为应该声明它)。

对于我来说,在内部声明将引发事件的类更有意义。原因是该类将声明的事件实际上只是辅助方法等的一些糖涂层,它们实际上正在添加,减去和调用委托等。

有没有最佳做法?是否有时候你想要在外面声明委托,有时你想在里面声明委托?如果是这样,应该如何决定该做什么?

3 个答案:

答案 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>)的想法,而不是越来越多的不兼容代表