今天看了关于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,为什么还能打开呢?
的确,.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();
}
}