2017-03-03 89 views
0

我最近开始开发与ASP.NET MVC和我发现一些例子覆盖基本控制器中的Dispose()方法,但大多数不。什么时候使用Dispose

什么是Dispose点,当它应该被重写,当是没有必要

+0

通常你不需要担心你的控制器。 IoC容器将管理您的控制器并为您注入资源。 –

+0

您会在SO上找到关于Dispose模式的大量问题(和答案)。长话短说:它是为了确定性地回馈使用的资源(最简单的例子:关闭一个打开的文件)。 – Oliver

回答

0

一般在.net中,你需要实现IDisposable,如果你的类中创建任何IDisposable的对象并将其存储为实例变量/属性。这条规则可能有例外。但是,IDisposable的意义在于清理垃圾收集器本身无法获得的系统资源。

所以,如果你的班级正在创建IDisposables,它也需要确保它们被清理。通过using(someDisposableChildObject){}直接或通过在Dispose方法中实现IDisposable和调用someDisposableChildObject.Dispose()

+0

我对COM有很少的经验,但从我知道的小事来看,不是所有的COM对象都继承了IDisposable?如果是这样,那么从你的答案,它的功能就像一个C++析构函数,因此应该是一个很好的习惯来覆盖它,除非你有充分的理由不去? – RobbieE

+0

在正常的类中,您不能“覆盖”处置,因为它不是对象的一部分。在这些情况下,它意味着实施IDisposable,这基本上要求消费者做额外的工作(通过处置)。 在控制器的情况下,覆盖不调用base.Dispose可能会很糟糕。除非你有一次性物品,否则你想要处理它是浪费时间去做。但只要你仍然称之为基地,它就不会受到伤害。 –

相关问题