簡體   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