似乎C#4.0不支持覆盖参数中的协方差(使用“in”关键字);是这样吗?.NET 4.0中有更好的方法来做到这一点吗?
如果是这样,有没有更好的方法来做到这一点?
背景
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社区。
感谢修改co-versus contravariance;我已经更新了问题和标签。 – arootbeer 2010-11-10 03:37:50