今天看了关于close和dispose的区别,有些不理解的地方求各位大大指点:
    摘抄:Close()被设计成public的,并且在Close()里面call被隐藏的Dispose(); Dispose()去call另一个virtual的Dispose(bool)函数。所以如果你从这个class继承,你就必须实现Dispose (bool)方法。
          Close()是关闭实例,使用的时候可以通过open打开,dispose是销毁对象,但是按照上边说的,close调用了dispose,为什么还能打开呢?

解决方案 »

  1.   

    Dispose是销毁这个类里面的所有对象,它并不能销毁自己
      

  2.   


    的确,.NET类库里大部分有Close方法地方都调用了Dispose。下面是一个明显的例子,
    Form1 frm = new Form1();
    frm.Show();
    frm.Close();
    frm.Show();//运行时错误,无法访问已释放的对象。
    不是绝对的,LZ说的这种情况就是没有调用Dispose方法或没有进行对象释放的工作!
      

  3.   

    楼主没有指明是窗体啊Connection.Open()
    connection.Close()
     
    ???
      

  4.   

    若是你没有继承别的类的话,调用了Dispose方法,同样也是可以继续使用该对象的。
    但通常人们都不那么做。它们提供Close函数,但却不提供Open函数,典型的例子是Stream它有Close但却没有Open.Socket类也是类似。
      

  5.   

    form类的close方法却没有完全的调用disposepublic void Close()
    {
        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();
        }
    }