C#中析构函数是有垃圾搜集器来调用的,当所引用的堆上的数据当无效时,会隐式调用。一般表现为当引用变量超出其作用域时就会调用。
Close函数和Dispose函数则是一种约定。调用Close函数释放资源后可能还需要再次使用,而Dispose函数释放的资源不再使用。
另外,如果类实现了IDisposable接口,实例化类时可以使用using关键字,则当超出using关键字作用域时会隐式调用Dispose函数,如:
using(CTest inst = new CTest())
{
//Do Something;
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();