似乎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