C#中解構函式,Close函式,Dispose函式的區別

iDotNetSpace發表於2009-04-03
  C#中解構函式是有垃圾蒐集器來呼叫的,當所引用的堆上的資料當無效時,會隱式呼叫。一般表現為當引用變數超出其作用域時就會呼叫。  
   
  Close函式和Dispose函式則是一種約定。呼叫Close函式釋放資源後可能還需要再次使用,而Dispose函式釋放的資源不再使用。  
   
  另外,如果類實現了IDisposable介面,例項化類時可以使用using關鍵字,則當超出using關鍵字作用域時會隱式呼叫Dispose函式,如:  
   
  using(CTest   inst   =   new   CTest())  
   
  {  
   
          //Do   Something;  
   

  }     //Call   Dispose   Method   Here  

 

看得到的區別:

1.在protected override void Dispose(bool disposing)方法中,加一個MessageBox,再在窗體中加一按鈕,按鈕程式碼是this.Close();

那麼MessabeBox並不會彈出來,也就是說並不會呼叫到DISPOSE方法

 

再把按鈕事件程式碼改為:this.Dispose();

那麼就會彈出MESSAGEBOX. 也就是直接銷燬窗體所開啟的所有資源.

2.在一個窗體中使用

Form. Frm2=new Form2();

Frm2.ShowDialog();

 

在Form2中使用Close()方法關閉窗體Form2後,在FORM1中還是可以直接使用Frm2.ShowDialog()把Form2顯示出來.

而用Dispose()方法關閉窗體Form2後, 在FORM1中就不可以直接使用Frm2.ShowDialog()把Form2顯示出來.還是要建立新例項Form. Frm2=new Form2();

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-580649/,如需轉載,請註明出處,否則將追究法律責任。

相關文章