【发布时间】:2020-09-16 00:44:18
【问题描述】:
我正在关注 EventBus 的教程并遇到以下界面:
public interface IEventHandler<in TEvent> : IEventHandler where TEvent : Event
{
Task Handle(TEvent @event);
}
public interface IEventHandler
{
}
现在,我得到了泛型部分和限制,但我错过了接口扩展自身的点。 这是我第一次看到它被这样使用。它完成什么? 任何人都可以对这个主题有所了解吗?谢谢!
【问题讨论】:
-
是什么让您认为接口实现了自己?泛型接口扩展了非泛型接口。如果您希望某些代码能够处理 any 事件处理程序,而其他代码只能处理 特定 事件处理程序,这将很有用。
-
接口自己实现是根本不可能的。如何在声明接口的同时实现未声明的自身?
-
是的。我现在明白了@JonSkeet
-
它们是同名的接口,但由泛型类型参数区分(因此,它们是不同的)。另请注意,您不能在 Java、Kotlin 或 TypeScript 等语言中执行此操作,因为 GTP 在编译时会被删除。由于 GTP 在运行时对 CLR 可见,因此
IEventHandler<T>和IEventHandler可以相互区分。 (注意 TypeScript(上图)以斜体显示,因为您可以实现类似的功能,如下所示:interface IEventHandler<T = any> { ... })
标签: c# generics .net-core interface restriction