今天看了关于close和dispose的区别,有些不理解的地方求各位大大指点:
摘抄:Close()被设计成public的,并且在Close()里面call被隐藏的Dispose(); Dispose()去call另一个virtual的Dispose(bool)函数。所以如果你从这个class继承,你就必须实现Dispose (bool)方法。
Close()是关闭实例,使用的时候可以通过open打开,dispose是销毁对象,但是按照上边说的,close调用了dispose,为什么还能打开呢?
摘抄:Close()被设计成public的,并且在Close()里面call被隐藏的Dispose(); Dispose()去call另一个virtual的Dispose(bool)函数。所以如果你从这个class继承,你就必须实现Dispose (bool)方法。
Close()是关闭实例,使用的时候可以通过open打开,dispose是销毁对象,但是按照上边说的,close调用了dispose,为什么还能打开呢?
解决方案 »
- 正则表达式高手请帮忙!!
- BindingNavigator 失效的问题
- 關于C# 事務操作的問題。。。
- 在c# windows 应用程序调用WORD 或EXCEL 中 ,WORD 和EXCEL的组成成分和详细的操作
- 做了一个c#+sql2000程序,在一台机器上安装数据库,另几台的人运行程序操作打开存盘这个库,怎样才能避免冲突。
- 如何用c#根據指定的內容,生成ppt文檔
- 写这样格式的 XML,需要怎样写?
- 哪位大哥能给C#编的数码管(LED)源代码
- 如何把List集合中的一列值绑定到Combox控件中
- 关于C#编译的问题!
- 局域网里如何禁止通过插优盘播放电影?
- 以字节数组的形式返回指定的 32 位有符号整数值。 什么意思?详细点~
的确,.NET类库里大部分有Close方法地方都调用了Dispose。下面是一个明显的例子,
Form1 frm = new Form1();
frm.Show();
frm.Close();
frm.Show();//运行时错误,无法访问已释放的对象。
不是绝对的,LZ说的这种情况就是没有调用Dispose方法或没有进行对象释放的工作!
connection.Close()
???
但通常人们都不那么做。它们提供Close函数,但却不提供Open函数,典型的例子是Stream它有Close但却没有Open.Socket类也是类似。
{
if (base.GetState(0x40000))
{
throw new InvalidOperationException(SR.GetString("ClosingWhileCreatingHandle", new object[] { "Close" }));
}
if (base.IsHandleCreated)
{
this.closeReason = CloseReason.UserClosing;
base.SendMessage(0x10, 0, 0);
}
else
{
base.Dispose();
}
}