繁体   English   中英

C#向下转换通用类型

[英]C# Downcasting a generic type

interface IMyEvent { }

class SpecificEvent : IMyEvent {  }

interface IMySubscriber<TEvent> where TEvent : IMyEvent { }

class MySubscriber<TEvent> : IMySubscriber<TEvent> where TEvent: IMyEvent { }

class EventPublisher
{
    public void Subscribe(IMySubscriber<IMyEvent> subscriber)
    {

    }
}

我不明白为什么无法使用MySubscriber<SpecificEvent>对象执行Subscribe方法。

new EventPublisher().Subscribe(new MySubscriber<SpecificEvent>());

它说它不能将MySubscriber<SpecificEvent> IMySubscriber<IMyEvent>IMySubscriber<IMyEvent> 您能否解释一下为什么会发生这种情况,或者提供一些链接以供我阅读。

为此,您必须使用out泛型参数标记接口:

interface IMySubscriber<out TEvent> where TEvent : IMyEvent { }

http://rextester.com/FAXW57974

参见: 对协方差和逆差以及输入/输出仍然感到困惑

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM