Недавно я обсуждал с коллегой о значении Dispose
и типах, которые реализуют IDisposable
.
Я думаю, что существует значение при реализации IDisposable
для типов, которые должны очищаться как можно скорее, , даже если нет неуправляемых ресурсов для очистки.
Мой коллега думает иначе; реализация IDisposable
, если у вас нет неуправляемых ресурсов, не требуется, так как ваш тип в конечном итоге будет собираться с мусором.
Мой аргумент заключался в том, что если бы у вас было соединение ADO.NET, которое вы хотели закрыть как можно скорее, то реализация IDisposable
и using new MyThingWithAConnection()
имела бы смысл. Мой коллега ответил, что под обложками соединение ADO.NET является неуправляемым ресурсом. Мой ответ на его ответ состоял в том, что все в конечном итоге является неуправляемым ресурсом.
Я знаю рекомендуемый шаблон одноразового использования, где свободные управляемые и неуправляемые ресурсы, если Dispose
называется, но свободные неуправляемые ресурсы, если вызваны через финализатор/деструктор (и ранее сообщал о том, как предупреждать потребителей о ненадлежащем использовании ваших IDisposable-типов)
Итак, мой вопрос: если у вас есть тип, который не содержит неуправляемые ресурсы, стоит ли реализовать IDisposable
?