2015-06-21 66 views
2

爲什麼Stream類實現IDisposable? 我認爲Stream類本身沒有任何非託管資源。 當然,某些子類具有非託管資源(例如FileStream),但並非所有子類都具有非託管資源(例如MemoryStream)。爲什麼Stream類實現IDisposable?

如果上述問題的答案是「因爲Stream類的子類可能有非託管資源」,那麼爲什麼Object類沒有實現IDisposable?

+5

很難說真的,我們可以假設,或假設,或考慮,但除非圖書館平臺的人之一回答,我們不知道。很可能是因爲當你將一個Stream對象傳遞給一個StreamReader(作爲一個實例),然後丟棄StreamReader時,Stream也將被處置。由於大多數實際的Stream實現將以某種方式與資源相關,我想他們從一開始就明確表示這是預期的。 –

回答

1

沒有人說資源必須是非託管的。它有需要清理的資源。您可以使用Close()完成同樣的事情,但是您的想法是,您可以將它與using語句一起使用,然後即使在出現異常情況下,也會保證清理資源。

using (var s = new System.IO.MemoryStream()) 
{ 
    //do something. 
} 
相關問題