События: обычно предназначены для необязательно потребления по вызывающему коду объекта - например, в качестве наблюдателя (или нескольких наблюдателей). Очень редко, когда обработка события принудительно . Не существует стандартной конструкции языка / компилятора для проверки подписки на событие во время компиляции (и я подозреваю, что это будет очень сложно, так как вы можете достоверно подписаться / отписаться в любое время, в любом месте кода - возможно, несколько раз, т.е. + HandlerA, + HandlerB, -HandlerA, -HandlerB - который заканчивается без подписчиков).
В представленном вами сценарии, где требуется , тогда передача его в конструктор звучит более уместно, но я бы, вероятно, использовал Func<...>
или Action<...>
в этом случае (не * 1015) *). Но это субъективно.
Другие подходы:
- делает его абстрактным классом и заставляет потребителя создавать подклассы и
override
один или более abstract
членов
- имеет параметр
interface
, который потребитель должен предоставить