2017-03-03 147 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可能會很糟糕。除非你有一次性物品,否則你想要處理它是浪費時間去做。但只要你仍然稱之爲基地,它就不會受到傷害。 –

相關問題