Другая ситуация - тривиальный случай, когда базовый класс или интерфейс предоставляют событие для чего-то, что никогда не произойдет в определенных производных типах. Например, интерфейс observable-collection только для чтения может предоставлять CollectionChangedEvent. Объект, содержащий переменную интерфейса, не сможет использовать ее для изменения коллекции, но может быть заинтересован в том, чтобы узнать, если / когда что-то еще изменит коллекцию. Такая сущность должна быть в состоянии использовать неизменную коллекцию так же, как изменяемую; с ее точки зрения, неизменяемая коллекция должна быть похожа на изменяемую коллекцию, которую никто не потрудит мутировать во время просмотра.
Наиболее логичной реализацией CollectionChangedEvent было бы иметь методы add- и remove-handler, которые ничего не делают, без вспомогательного поля делегата. Внешняя сущность, которая вызывает метод add-handler, по сути, говорит «Позвоните мне, если эта коллекция изменится». Когда он вызывает метод remove-handler, он по сути говорит: «Мне больше не нужно знать, изменяется ли эта коллекция». Если коллекция никогда не изменится, эти запросы можно выполнить, просто ничего не делая.