zoukankan      html  css  js  c++  java
  • 学习:c#中的close、dispose的区别(转)


      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显示出来.
    ww y7iyP%q%@0

    而用Dispose()方法关闭窗体Form2后, 在FORM1中就不可以直接使用Frm2.ShowDialog()把Form2显示出来.还是要创建新实例Form. Frm2=new Form2();


    文章来源:http://space.itpub.net/12639172/viewspace-580649

  • 相关阅读:
    心情记录&考试总结 3.30
    BZOJ 1982 Moving Pebbles
    BZOJ 3759 Hungergame
    51Nod 算法马拉松12 Rikka with sequences
    51Nod 算法马拉松12 移数博弈
    BZOJ 3720 gty的妹子树
    BZOJ 4184 shallot
    BZOJ 3160 万径人踪灭
    好好学习天天向上
    java解析json字符串
  • 原文地址:https://www.cnblogs.com/LeimOO/p/1581923.html
Copyright © 2011-2022 走看看