Следует ли использовать Dispose только для типов, содержащих неуправляемые ресурсы?

Недавно я обсуждал с коллегой значение Disposeи типы, которые реализуют IDisposable.

Я думаю, что есть смысл реализовать IDisposableдля типов, которые должны очищаться как можно скорее, даже если нет неуправляемых ресурсов для очистки .

Мой коллега думает иначе; реализация IDisposable, если у вас нет неуправляемых ресурсов, не требуется, так как ваш тип в конечном итоге будет удален сборщиком мусора.

Мой аргумент состоял в том, что если у вас есть соединение ADO.NET, которое вы хотите закрыть как можно скорее, то реализация IDisposableи using new MyThingWithAConnection()имеет смысл. Мой коллега ответил, что под прикрытием соединение ADO.NET — это неуправляемый ресурс . Я ответил на его ответ, что все в конечном счете является неуправляемым ресурсом .

Мне известен рекомендуемый одноразовый шаблон , в котором вы освобождаете управляемые и неуправляемые ресурсы, если Disposeвызывается , но освобождаете только неуправляемые ресурсы, если вызывается через финализатор/ destructor(и некоторое время назад написал в блоге о том, как предупреждать потребителей о неправильном использовании ваших типов IDisposable)

Итак, мой вопрос: если у вас есть тип, который не содержит неуправляемых ресурсов, является ли он стоит реализовать IDisposable?

65
задан Steve Dunn 27 April 2012 в 12:32
поделиться