Редко упоминаемый сценарий, в котором правильное использование iDisposable критическое - это объект с коротким сроком полезного использования, который получает события от долгоживущего объекта. Метод Dispose для такого объекта должен отписаться о его событиях. Если объект не отменяет подписку сам по себе, он не будет иметь право на сборку мусора до тех пор, пока объект (ы), события которого он подписал, не станет пригодным для сбора мусора; это вполне может быть никогда.
Например, некоторые типы перечислителей должны подписываться на сообщения «объект изменен». Было бы вполне вероятно, что многие тысячи таких перечислителей будут созданы во время выполнения долгосрочной программы. Если бы такие перечислители не были отписаны, они могли бы эффективно засорить систему, даже если они никогда не использовали никаких ресурсов, кроме управляемой памяти.
Обратите внимание, что, несмотря на важность удаления такого объекта, добавление финализатора для обеспечения такого удаления было бы бесполезным. Если издатель событий вышел из области действия, попытка отписаться от одного из его событий была бы в лучшем случае бесполезной и, возможно, опасной. Поскольку подписчик события не может выйти из области видимости, если только издатели всех событий, которые он получает, также не выйдут из области видимости, финализатор будет вызываться только после того, как ему ничего не останется.