“Dispose” deve ser usado apenas para tipos que contêm recursos não gerenciados?

Eu estava tendo uma discussão com um colega recentemente sobre o valor deDispose e tipos que implementamIDisposable.

Eu acho que há valor na implementaçãoIDisposable para tipos que devem ser limpos o mais rápido possívelmesmo se não houver recursos não gerenciados para limpar.

Meu colega pensa diferente; implementandoIDisposable Se você não tiver recursos não gerenciados, não será necessário, pois o tipo será eventualmente coletado como lixo.

Meu argumento era que, se você tivesse uma conexão ADO.NET que queria fechar o mais rápido possível, então implementarIDisposable eusing new MyThingWithAConnection() faria sentido. Meu colega respondeu que, sob as capas, uma conexão ADO.NET é umarecurso não gerenciado. A minha resposta à sua resposta foi quetudo, em última análise, é um recurso não gerenciado.

Estou ciente dopadrão descartável recomendado onde vocêrecursos gerenciados e não gerenciados gratuitos seDispose é chamado masapenas recursos não gerenciados gratuitos se chamados através do finalizador / destruidor (e blogged um tempo atrás sobre comoalertar os consumidores sobre o uso indevido de seus tipos de IDisposable)

Então, minha pergunta é, se você tem um tipo que não contém recursos não gerenciados, vale a pena implementarIDisposable?

questionAnswers(15)

yourAnswerToTheQuestion