【发布时间】:2010-11-10 00:20:39
【问题描述】:
C# 4.0 似乎不支持覆盖参数的协方差(使用“in”关键字);是这样吗?
如果是这样,有没有更优雅的方法来做到这一点?
上下文
public interface IBaseEvent { /* ... */ }
public interface IDerivedEvent : IBaseEvent { /* ... */ }
public class MoreDerivedEvent : IDerivedEvent { /* ... */ }
我有一组处理MoreDerivedEvent 的类。由于事件处理代码的限制,我只能为MoreDerivedEvent注册一个事件处理程序,我不知道它会将注册接口作为事件处理(我不相信它会,因为指导是明确使用类)。因此,为了适当地处理事件,我定义了如下处理程序:
public class BaseType
{
protected virtual void Handle(IBaseEvent @event) { /* Do Base Stuff */ }
}
public class DerivedType
{
protected virtual void Handle(IDerivedEvent @event)
{
/* Do Derived Stuff */
Handle((IBaseEvent)@event);
}
protected override sealed void Handle(IBaseEvent @event)
{
base.Handle(@event);
}
}
这显然不能提供真正的继承,如果我不能解决这个问题,我可能只会扁平化从DerivedType 和BaseType 派生的类型。但我想我会先把它放到 Stack Overflow 社区。p>
【问题讨论】:
标签: c# .net-4.0 overriding contravariance