Я думаю, что позволю себе немного отличаться от Лорана по этому вопросу. Идея, лежащая в основе IDisposable, заключается в том, что объект может иметь некоторую очистку, которая должна выполняться, и сама по себе не имеет ничего общего со сборкой мусора. Фактически, большую часть времени IDisposable реализуется для очистки неуправляемых ресурсов, таких как дескрипторы файлов, объекты синхронизации или соединения с базой данных, которые находятся вне сферы действия GC. Кроме того, только потому, что базовый класс реализует IDisposable, не означает, что он должен иметь реальную реализацию. Это можно отнести к виртуальному методу Dispose (bool dispose), который может быть переопределен производными классами, чтобы они могли выполнять очистку.
Проблема, на которую намекает Будда, заключается в том, что IDisposable является односторонней операцией. После удаления объекта он должен вызвать исключение ObjectDisposedException для своих открытых методов. Если все, что вы хотите сделать, это очистить ресурсы, чтобы вы могли повторно использовать объект, тогда имеет смысл метод очистки. Однако я не обязательно удаляю функциональность Dispose, которая служит другой цели.