如果我使用IDisposable實現一個對象,那麼即使它們沒有其他資源要釋放,擁有該對象的所有對象是否也應該實現它?IDisposable鏈
回答
是的。你需要處理它們,以便讓你的成員變量得到正確的處理。
任何時候你封裝一個IDisposable類,你應該讓你的類IDisposable。在你的Dispose方法中,你應該處理你的封裝資源。基本上,對待它們的方式與對待本機資源的方式相同。
如果需要確定性處置,最終某些客戶端需要調用Dispose或將調用包裝在「使用」塊中。爲了向您的對象滴流,這可能需要擁有者實現IDisposable。
您不應該依賴垃圾收集器來釋放任何時間相關的資源。
這不是一個非託管資源問題。擁有非託管資源的對象將使用'SafeHandle'或2)使用用戶定義的終結器來釋放非託管資源。雖然這是非確定性的,但垃圾收集器*能夠正確釋放未經處理的資源。適當的「IDisposable」鏈的主要好處是及時「關閉」,「結束」或「釋放」對這個問題敏感的資源,例如(但絕對不限於)I/O。 –
已注意。謝謝。 –
是的,擁有類應該實現IDisposable,但它不需要(不應該有)Finalizer(析構函數)。
NOP,他們只需要使用類與「使用」的聲明,以確保他們妥善處理該對象,但這些對象本身並不需要實現IDisplosable
如果另一個類擁有一次性對象,它也應該實現IDisposable。否則,擁有類沒有辦法允許呼叫者處理它,並因此無法處理它擁有的內部可支配資源。 –
它只是取決於類如何在內部使用對象 – BlackTigerX
我特別使用「own」這個詞來表示「有一個指定類型的成員變量」,所以不能這樣做。我使用「正在使用」的工作來說明你正在談論的內容。 –
- 1. IDisposable Winform
- 2. Impementing IDisposable
- 3. 當了IDisposable被傳遞到父IDisposable的
- 4. 實現了IDisposable
- 5. 嘲笑IDisposable類
- 6. IDisposable和COM
- 7. IDisposable和ReaderWriterLockSlim
- 8. IDisposable和WCF
- 9. IDisposable的問題
- 10. 爲IDisposable的
- 11. EntLib IDisposable轉換
- 12. IDisposable示例
- 13. System :: IDisposable woes
- 14. 與IDisposable混淆
- 15. WebControls和IDisposable
- 16. 使用IDisposable
- 17. PRISM/Unity IDisposable
- 18. Winforms處置IDisposable
- 19. IDbTransaction和IDisposable
- 20. StructureMap InstanceScope.Hybrid和IDisposable
- 21. Tricky IDisposable問題
- 22. 傳遞IDisposable的對象,通過構造函數鏈
- 23. C#類,subclases,IClonable,IDisposable
- 24. 試圖理解IDisposable
- 25. Autofac和IDisposable接口
- 26. EntityFramework給IDisposable錯誤
- 27. WCF Proxy + DI(Ninject)+ IDisposable
- 28. 清理IDisposable問題
- 29. Coverity,Enumerable.Where(this ...)和IDisposable
- 30. 使用SmtpClient和IDisposable
只有你不能假設的順序如果由GC終結器線程引發,則會釋放對象。 –
確實 - 但我不確定這是如何相關的。如果你包裝你的課程並使其一次性完成,你可以控制每個封裝資源的處理順序。 –