回答
一般在.net中,你需要实现IDisposable,如果你的类中创建任何IDisposable的对象并将其存储为实例变量/属性。这条规则可能有例外。但是,IDisposable的意义在于清理垃圾收集器本身无法获得的系统资源。
所以,如果你的班级正在创建IDisposables,它也需要确保它们被清理。通过using(someDisposableChildObject){}
直接或通过在Dispose方法中实现IDisposable和调用someDisposableChildObject.Dispose()
。
我对COM有很少的经验,但从我知道的小事来看,不是所有的COM对象都继承了IDisposable?如果是这样,那么从你的答案,它的功能就像一个C++析构函数,因此应该是一个很好的习惯来覆盖它,除非你有充分的理由不去? – RobbieE
在正常的类中,您不能“覆盖”处置,因为它不是对象的一部分。在这些情况下,它意味着实施IDisposable,这基本上要求消费者做额外的工作(通过处置)。 在控制器的情况下,覆盖不调用base.Dispose可能会很糟糕。除非你有一次性物品,否则你想要处理它是浪费时间去做。但只要你仍然称之为基地,它就不会受到伤害。 –
- 1. 什么时候应该使用AWS,什么时候不使用
- 2. intn_t什么时候使用它,什么时候不使用
- 3. 什么时候使用__proto__和什么时候使用原型
- 4. 什么时候使用Ruby和什么时候使用PHP
- 5. 什么时候使用uncaught_exception?
- 6. 什么时候使用vtable?
- 7. 什么时候使用sIFR?
- 8. JOINS什么时候使用?
- 9. 什么时候使用ANTLR
- 10. 什么时候使用StringIO?
- 11. Railties - 什么时候使用
- 12. 什么时候使用SpringApplicationBuilder?
- 13. 什么时候使用GWT,什么时候不需要
- 14. ZF2什么时候使用getServiceLocator()什么时候不到
- 15. SQL Server CASE什么时候不使用CASE什么时候
- 16. 什么时候使用信号和插槽,什么时候不使用
- 17. 什么时候应该使用Import-Package,什么时候应该使用Require-Bundle?
- 18. 什么时候使用适配器和什么时候使用inflater
- 19. 什么时候使用for-each和什么时候在xslt中使用apply-templates?
- 20. 什么时候适合使用双向关联,什么时候不适用?
- 21. 为什么Dispose被调用?
- 22. 什么时候使用hash()调用__eq__?
- 23. 什么时候应该使用let {},什么时候只是简单的!= null
- 24. 目标C什么时候使用alloc和什么时候不到
- 25. 什么时候应该使用学说ORM和什么时候zend-db-table?
- 26. 什么时候调用setDataTimeout?
- 27. 什么时候用短?
- 28. 什么时候调用webview.clearData
- 29. 什么时候DataView可用?
- 30. 什么时候调用robot.cleanUp()
通常你不需要担心你的控制器。 IoC容器将管理您的控制器并为您注入资源。 –
您会在SO上找到关于Dispose模式的大量问题(和答案)。长话短说:它是为了确定性地回馈使用的资源(最简单的例子:关闭一个打开的文件)。 – Oliver