學習:c#中的close、dispose的區別

來源:互聯網
上載者:User
  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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.