Комментарии 3
Ностальгии по Muzzy коммент...
Проблема виртуальных событий — точно такая же как и у виртуальных свойств. И связана она исключительно с тем, что генерируемая по умолчанию реализация не вызывает методы базового класса.
Вот так переопределять события можно:
class Child : Base
{
public override event Action MyCustomEvent
{
add { _myCustomEvent += value; base.MyCustomEvent += value; }
remove { _myCustomEvent -= value; base.MyCustomEvent -= value; }
}
private Action _myCustomEvent;
}
Или вот так:
class Child : Base
{
public override event Action MyCustomEvent
{
add { _myCustomEvent += value; }
remove { _myCustomEvent -= value; }
}
private Action _myCustomEvent;
private void FireMyCustomEvent()
{
_myCustomEvent?.Invoke();
}
public Child()
{
base.MyCustomEvent += FireMyCustomEvent;
}
}
Хотя в обоих случаях намного правильнее сделать в базовом классе виртуальный метод для вызова события, а само событие оставить невиртуальным.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Виртуальные события в C#: что-то пошло не так