【发布时间】:2010-11-12 06:50:07
【问题描述】:
.NET 2.0 增加了EventHandler<TArgs> 泛型委托类型以简化编写自定义事件的过程;不必定义EventArgs 类及其对应的委托(例如MyEventArgs 和MyEventHandler),您只需编写args 类。
考虑到这一点,为什么这种委托类型在 .NET Framework 中几乎没有出现?我知道大多数核心 API 是在引入泛型之前开发的,但即使在 WPF 等框架的新部分中,它们也选择显式定义委托类型;例如RoutedEventHandler 而不是 EventHandler<RoutedEventArgs>。
通用事件处理程序委托是否存在固有问题?我经常使用它,但我担心我的代码与内置类相比显得非常不合适。
【问题讨论】:
-
我怀疑引入
EventHandler<T>只是时机不对。到它被引入时,另一种模式(明确命名的委托)已经牢固确立,开始转向通用委托类型可能会被视为造成更大的混乱(导致困惑的程序员问,“什么那个代表又被叫到了吗?FooEventHandler或EventHandler<Foo>?") -- 这让我很好奇转向IEvent<T>(由 F# 和 Rx 框架引入)是否会奏效。 -
WPF 于 2003 年 7 月开始,远在泛型可用之前。当然,Windows 窗体也是如此。
标签: c# events generics delegates