C#中解構函式是有垃圾搜集器來調用的,當所引用的堆上的資料當無效時,會隱式調用。一般表現為當引用變數超出其範圍時就會調用。
Close函數和Dispose函數則是一種約定:
調用Close函數釋放資源後可能還需要再次使用,而Dispose函數釋放的資源不再使用;
另外,如果類實現了IDisposable介面,執行個體化類時可以使用using關鍵字,則當超出using關鍵字範圍時會隱式調用Dispose函數,
如:
using(CTest inst = new CTest()) ITPUB個人空間f1O)U3BC)e
{
//Do Something;
} //Call Dispose Method Here
看得到的區別:
1.在protected override void Dispose(bool disposing)方法中,加一個MessageBox,再在表單中加一按鈕,按鈕代碼是this.Close();
那麼MessabeBox並不會彈出來,也就是說並不會調用到DISPOSE方法;
再把按鈕事件代碼改為:this.Dispose();ITPUB個人空間"}4yNs-y6PW!hD|s
那麼就會彈出MESSAGEBOX. 也就是直接銷毀表單所開啟的所有資源.
3fj!C^lcX0
2.在一個表單中使用
Form. Frm2=new Form2();ITPUB個人空間C`"Y6K$j_
Frm2.ShowDialog();
在Form2中使用Close()方法關閉表單Form2後,在FORM1中還是可以直接使用Frm2.ShowDialog()把Form2顯示出來.
wwy7iyP%q%@0
而用Dispose()方法關閉表單Form2後, 在FORM1中就不可以直接使用Frm2.ShowDialog()把Form2顯示出來.還是要建立新執行個體Form. Frm2=new Form2();
文章來源:http://space.itpub.net/12639172/viewspace-580649