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>
。你能解释它为什么会发生,或提供一些链接,我可以阅读它。
答案 0 :(得分:2)
为此,您必须使用out
通用参数标记界面:
interface IMySubscriber<out TEvent> where TEvent : IMyEvent { }
http://rextester.com/FAXW57974
请参阅:still confused about covariance and contravariance & in/out