微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决为什么 EventArgs 约束从 EventHandler<TEventArgs> 中删除?

在 .NET Framework 2.0 中,委托 EventHandler 得到了它的泛化,允许第二个参数不仅是 EventArgs 类型,而且是派生类型,对其实现施加更严格的约束。但根据我在 likely in .NET Framework 4.5reference 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。我选择通过 EditorConfig 抑制该问题,因为我无法更改 SonarQube 中的质量配置文件,但我仍然想知道为什么首先需要进行此重大更改。

我曾在 a great question regarding EventHandler<TEventArgs> variancea separate question 中看到过一个非常相似的问题,但我的问题没有在那里得到解答。他们的问题是约束为什么不存在(当前状态),我问的是为什么它被移除(改变的原因),感觉有点不同,因为原因需要足够强大来证明改变是合理的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。