Вы можете реализовать это с помощью пользовательских add
/ remove
методов, но я считаю, что это плохая практика.
Смотри, у тебя есть интерфейс , контракт , который должен быть реализован различными классами.
OnProcess
является частью этого контракта и никоим образом не является особенным.
Обычно используют интерфейсы, когда хотят работать с разными классами под одним и тем же набором операций . Интерфейсы позволяют кодировать так:
IProcessor proc = GetProcessorAnyhow ();
proc.DoSomething ();
без знания конкретного типа при типе компиляции.
Однако, с вашим подходом,
IProcessor proc = GetProcessorAnyhow ();
proc.OnProcess += (sender, e) => { };
может произойти сбой без видимой причины, хотя это выглядит как абсолютно законный код.
Всегда следите за тем, чтобы неправильный код выглядел неправильно .
Возможно, вы допустили одну из следующих ошибок проектирования:
- Положите
OnProcess
в IProcessor
, тогда как не может быть каждый контракт процессора ;
- Сделано
EmptyProcessor
реализовать IProcessor
, тогда как на самом деле не может удовлетворить контракт .