亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請問C# Dispose();和Close();的不同?有什么不一樣的嗎?

請問C# Dispose();和Close();的不同?有什么不一樣的嗎?

尚方寶劍之說 2021-10-21 17:11:05
Dispose();和Close();有什么不同?比如StreamReader既有.Dispose();又有.Close();
查看完整描述

3 回答

?
慕桂英4014372

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)方法去釋放資源。

查看完整回答
反對 回復 2021-10-24
?
ibeautiful

TA貢獻1993條經驗 獲得超6個贊

close是關閉而已,不釋放資源。就像開門和關門一樣,對于你進去做的事情他不管.
而dispose就是釋放資源!就是把StreamReader對象里面的數據給清空,不豪存儲空間.

查看完整回答
反對 回復 2021-10-24
?
元芳怎么了

TA貢獻1798條經驗 獲得超7個贊

Close();//關閉
Dispose();//消毀,這個不用管,自己用調用。

查看完整回答
反對 回復 2021-10-24
  • 3 回答
  • 0 關注
  • 307 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號