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