Pull to refresh

Comments 3

Да, мульт замечательный. На его основе в свое время неплохую образовательную телепередачу сделали в свое время.

Проблема виртуальных событий — точно такая же как и у виртуальных свойств. И связана она исключительно с тем, что генерируемая по умолчанию реализация не вызывает методы базового класса.


Вот так переопределять события можно:


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;
  }
}

Хотя в обоих случаях намного правильнее сделать в базовом классе виртуальный метод для вызова события, а само событие оставить невиртуальным.

Sign up to leave a comment.