3 回答

TA貢獻1871條經驗 獲得超13個贊
當我們開發C#代碼的時候,經常碰到一個問題,有些class提供Close(),有些class提供Dispose(),那么Dispose和Close到底有什么區別?
首先,Dispose和Close基本上應該是一樣的。Close是為了那些不熟悉Dispose的開發者設計的。因為基本上所有的developer都知道Close是干嗎的(特別是對于那些有C++背景的developer)。
但是當我們寫code時候,如果要實現Close和Dispose的時候,要注意Close和Dispose的設計模式。.net的一些class只提供Close,而且派生自IDisposable,并且隱藏了Dispose方法。是不是覺得很不明白了?
對這些class來說,關鍵在于它們顯式的(explicitly)實現了IDisposable。對于隱式實現來說,你只需要調用"new A().Dispose()",但是對于顯式實現來說,Dispose不會是這個class的成員函數。唯一的調用方式是你先要cast到 IDisposable才行。(“new A().Dispose()”編譯不過,但是“((IDisposable)new A()).Dispose()”可以編譯過)。所以這樣就符合了設計的要求:提供Close(),隱藏Dispose(),并且實現了 IDisposable接口。
在.net的framework里,Close()被設計成public的,并且在Close()里面call被隱藏的Dispose(); Dispose()去call另一個virtual的Dispose(bool)函數。所以如果你從這個class繼承,你就必須實現Dispose (bool)方法。
調用者call Close()的時候就會call到你重載的那個Dispose(bool)方法去釋放資源。

TA貢獻1993條經驗 獲得超6個贊
close是關閉而已,不釋放資源。就像開門和關門一樣,對于你進去做的事情他不管.
而dispose就是釋放資源!就是把StreamReader對象里面的數據給清空,不豪存儲空間.
- 3 回答
- 0 關注
- 307 瀏覽
添加回答
舉報