“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
?