Czy „Dispose” powinno być używane tylko dla typów zawierających niezarządzane zasoby?

Rozmawiałem ostatnio z kolegą o wartościDispose i typy, które implementująIDisposable.

Myślę, że wdrożenie ma wartośćIDisposable dla typów, które powinny posprzątać jak najszybciej,nawet jeśli nie ma niezarządzanych zasobów do oczyszczenia.

Mój kolega myśli inaczej; realizowanieIDisposable jeśli nie masz żadnych niezarządzanych zasobów, nie jest to konieczne, ponieważ twój typ zostanie ostatecznie usunięty.

Mój argument był taki, że jeśli masz połączenie ADO.NET, które chcesz zamknąć jak najszybciej, a następnie zaimplementujIDisposable iusing new MyThingWithAConnection() miałoby sens. Mój kolega odpowiedział, że pod osłonami połączenie ADO.NET toniezarządzany zasób. Moja odpowiedź na jego odpowiedź była takawszystko ostatecznie jest zasobem niezarządzanym.

Jestem świadomy tegozalecany wzór jednorazowego użytku gdzie jesteśdarmowe zarządzane i niezarządzane zasoby, jeśliDispose jest nazywany alezwolnić tylko niezarządzane zasoby, jeśli zostaną wywołane przez finalizer / destructor (i blogował jakiś czas temu, jak to zrobićpowiadom konsumentów o niewłaściwym użyciu typów IDisposable)

Więc moje pytanie brzmi, czy jeśli masz typ, który nie zawiera zasobów niezarządzanych, czy warto go wdrożyćIDisposable?

questionAnswers(15)

yourAnswerToTheQuestion