c# - “自我扩展”的界面确保了什么?
问题描述
我正在关注 EventBus 的教程,并遇到了以下界面:
public interface IEventHandler<in TEvent> : IEventHandler where TEvent : Event
{
Task Handle(TEvent @event);
}
public interface IEventHandler
{
}
现在,我得到了泛型部分和限制,但我错过了接口扩展自身的点。这是我第一次看到它被这样使用。它有什么作用?任何人都可以对这个主题有所了解吗?谢谢!
解决方案
在 C# 中,类型Interface
和Interface<T>
(您有时会将此视为Interface`1
)是不同的类型。它们在类型系统内部没有关系(除非一个接口扩展了另一个接口)。
当您来自 Java 背景时,这可能会令人困惑,因为您有“原始类型”并且 aList<T>
始终List
同时是 a。这不适用于 C#。
您可以重命名接口以使这种区别更清晰:
IEventHandler<in TEvent> : IEventHandlerRaw
(这只是为了让解释更清楚。不建议在生产代码中使用)
推荐阅读
- git - 有谁知道为什么“之前”包括完成日期?
- vaadin - Vaadin 14 - 禁用按钮上的悬停响应
- node.js - 在 Windows 10 上安装 Node.js 总是会导致错误
- uwp - 如何在后面的代码中选择 UWP Xaml 控件库 RadioButton 中的选项
- c++ - 如何使用 C++20 模块包装实现?
- asp.net-core - 基于聚合的 ASP.NET Core Web API 拆分控制器
- javascript - jsPDF 单元和 HTML 单元在生成的 PDF 中未对齐
- javascript - 如何在特定位置插入元素标签而不在jquery中关闭标签
- c# - C#,读取 CSV 以获取 2 列中重复的单元格值,计算某些内容出现的次数,将其加 1 并将其附加到字符串以进行数字增量
- excel - 条件格式最后一行粘贴