如何解决为什么 EventArgs 约束从 EventHandler<TEventArgs> 中删除?
在 .NET Framework 2.0 中,委托 EventHandler 得到了它的泛化,允许第二个参数不仅是 EventArgs 类型,而且是派生类型,对其实现施加更严格的约束。但根据我在 likely in .NET Framework 4.5 和 reference source 中发现的评论,在 .NET Framework 4 .NET Runtime source 中的某个时候,通用约束被删除了。
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
namespace System
{
public delegate void EventHandler(object? sender,EventArgs e);
public delegate void EventHandler<TEventArgs>(object? sender,TEventArgs e); // Removed TEventArgs constraint post-.NET 4
}
但是放弃约束从而破坏与现有用户的兼容性有什么意义?或者,即使是 .NET 团队以外的人也可以对此负责,这样的动机是什么?
由于 SonarQube 规则 S3906,我遇到了这个过时的更改,它看起来像是已弃用的 CA1009 的副本,并且要求事件处理程序的类型需要 EventArgs 作为其第二个参数。这现在与 CA1003 冲突,后者需要使用通用 EventArgs
我曾在 a great question regarding EventHandler<TEventArgs> variance 和 a separate question 中看到过一个非常相似的问题,但我的问题没有在那里得到解答。他们的问题是约束为什么不存在(当前状态),我问的是为什么它被移除(改变的原因),感觉有点不同,因为原因需要足够强大来证明改变是合理的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。