繁体   English   中英

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

[英]Should a delegate be declared inside the class that will raise the event, or outside?

我已经看到了各种事件处理的例子。 这是一个: 事件样本

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

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

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

通常,这些天你创建自己的类派生自EventArgs ,然后只使用EventHandler<TEventArgs> - 不需要创建单独的委托类型。 因此,不使用AlarmEventHandler ,而是使用EventHandler<AlarmEventArgs> EventArgs派生的类通常应该是顶级的(即非嵌套的)。

我会在外面宣布它们,因为它们也被其他类使用 - 事件的消费者。 如果委托特定于此类,我会将委托保留在与该类相同的文件中。

如果您使用.NET 2.0及更高版本中提供的EventHandler<TEventAgrs>通用版本,则不会出现问题,因为您只需要声明自定义EventArgs

如果我没记错的话,CLR中很少有公共可访问的嵌套“对象”(classes / structs / delegates / enums)。 因此,代表通常是班级的“外部”。

但是从.NET 3.5开始,一直有使用“泛型”委托( Func<T>Action<T>Predicate<T> )而不是越来越多的不兼容委托的想法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM