Похоже, что 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.