.net 为什么从EventHandler中删除EventArgs约束<;TEventArgs>;?

.net 为什么从EventHandler中删除EventArgs约束<;TEventArgs>;?,.net,events,compatibility,eventargs,generic-constraints,.net,Events,Compatibility,Eventargs,Generic Constraints,在.NETFramework2.0中,委托EventHandler得到了它的泛化,允许第二个参数不仅是EventArgs类型,而且是派生类型,从而对其实现施加了更严格的约束。但根据我在和中找到的一条评论,在.NETFramework4中,通用约束被删除了 //在一个或多个协议下许可给.NET基金会。 /.NET基金会将此文件授权给MIT许可证。 名称空间系统 { 公共委托void EventHandler(对象?发送方,EventArgs e); public delegate void Ev

在.NETFramework2.0中,委托EventHandler得到了它的泛化,允许第二个参数不仅是EventArgs类型,而且是派生类型,从而对其实现施加了更严格的约束。但根据我在和中找到的一条评论,在.NETFramework4中,通用约束被删除了

<代码> //在一个或多个协议下许可给.NET基金会。 /.NET基金会将此文件授权给MIT许可证。 名称空间系统 { 公共委托void EventHandler(对象?发送方,EventArgs e); public delegate void EventHandler(object?sender,TEventArgs e);//删除了TEventArgs约束post-.NET 4 } 但是,放弃约束从而破坏与现有用户的兼容性有什么意义?或者,即使是.NET团队之外的人也要对此负责,这样的动机是什么

由于SonarQube规则,我遇到了这种过时的更改,它看起来像是已弃用规则的副本,并且要求事件处理程序的类型需要EventArgs作为其第二个参数。这现在与冲突,这需要使用通用EventArgs。我选择通过EditorConfig来抑制这个问题,因为我无法在SonarQube中更改质量配置文件,但我仍然想知道为什么首先需要这个突破性的更改


我曾经看到过一个非常类似的问题,作为和的一部分,但我的问题没有得到回答。他们的问题是为什么约束不存在(当前状态),我问的是为什么它被删除(更改的原因),这感觉有点不同,因为原因需要足够强大来证明更改的合理性。

我不明白为什么它会破坏任何东西:如果处理程序具有签名
void(object,EventArgs)
它仍然可以传递给泛型
EventArgs
的构造函数,唯一会中断的是
void(object,object)
现在编译以前没有的版本。我考虑的是二进制兼容性,以及二进制调用事件处理程序时使用例如EventArgs.Empty的情况。更改EventArgs.Empty的定义后,不再保证EventArgs.Empty是有效值。但现在我再仔细考虑一下,我想不出什么情况会适得其反-(这里已经很晚了,我度过了艰难的一天,明天早上我需要再考虑一下。