Close 是停業整頓,停業了,能夠經過公關,再重開,物仍是原來的物;
只是關閉而已,沒有釋放真正的釋放資源,能夠從新打開;
Close是關門Dispose是破產;html
Dispose 是炸燬,炸燬了,想再開張,就只有重頭建起;
是把對象銷燬,將再也不存在;
Close是關門Dispose是破產;設計模式
那個人ShowDialog窗體用完後該如何?
看你在何時new的看它的生命期羅……
如果在一個button的click裏new一個Form出來ShowDialog,用完後close也能夠Dispose也行,button的click完了,你不收拾它,它Form也會被閻羅王的馬仔(垃圾收集器)帶走。
如果一個窗體需共用ShowDialog的Form,是在外面new的,你用完後只需Close就好了,由於別人還要用。可是要在何時Dispose呢?那就要看你是在何時什麼地點new的羅,找一個與它門當戶對的地方與時候來Dispose它便可。例如你在Form_Load時new的,那就在Form_UnLoad時來Dispose它了。函數
下面是另外一位園主的見解http://www.cnblogs.com/kevinwan/archive/2007/01/16/621869.html,說的也不錯哦spa
當咱們開發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)方法去釋放資源。.net