首页 > 解决方案 > “自我扩展”的界面确保了什么?

问题描述

我正在关注 EventBus 的教程,并遇到了以下界面:

public interface IEventHandler<in TEvent> : IEventHandler where TEvent : Event
{
    Task Handle(TEvent @event);
}

public interface IEventHandler
{

}

现在,我得到了泛型部分和限制,但我错过了接口扩展自身的点。这是我第一次看到它被这样使用。它有什么作用?任何人都可以对这个主题有所了解吗?谢谢!

标签: c#generics.net-coreinterfacerestriction

解决方案


在 C# 中,类型InterfaceInterface<T>(您有时会将此视为Interface`1)是不同的类型。它们在类型系统内部没有关系(除非一个接口扩展了另一个接口)。

当您来自 Java 背景时,这可能会令人困惑,因为您有“原始类型”并且 aList<T>始终List同时是 a。这不适用于 C#。

您可以重命名接口以使这种区别更清晰:

IEventHandler<in TEvent> : IEventHandlerRaw

(这只是为了让解释更清楚。不建议在生产代码中使用)


推荐阅读