2012-07-31 21 views
4

當執行using關鍵字來實例化一個IO.StreamWriter對象時,是否意味着在對象上調用了.close.dispose?或者它是否重要,因爲一旦它達到最終使用它超出了範圍,並且無論如何都會收集垃圾?使用關鍵字:.Close或.Dispose

回答

6

using關鍵字將調用Dispose。但是,通過公約,DisposeClose應該始終執行完全相同的功能,並且可以互換。

這樣,任何資源即IDisposable而且還提供了Close()方法,如Stream派生類,是細到using塊內使用。

這在Framework Design Guidelines明確的問題:「你讓Close執行相同Dispose是很重要的」 ......

MSDN help for IDisposable也表明這一點:「有這樣一個公約一類的實施者可能會選擇實現具有調用Dispose方法的定製名稱(如Close)的公共方法。「

或者是否重要,因爲一旦它達到使用它的目的是超出範圍,並且將垃圾收集呢?

它不會被垃圾收集 - 後不再在範圍,而不再引用任何對象,這將是資格進行垃圾回收。這意味着它將(至少在正確書寫的情況下),最終得到清理,但它可能不會發生很長一段時間 - 包括直到程序終止。使用塊會導致資源(而非內存)(例如流)立即關閉

2

Using只在範圍末尾調用Dispose。但是,對於諸如StreamWriterDispose等類的內部結束呼叫Close

或者是否重要,因爲一旦它達到使用它的目的是超出範圍,並且將垃圾收集呢?

這是一種錯覺:全原因Using塊和Dispose方法是一個對象是在範圍的端立即收集垃圾。