在C#中实现IDisposable

这个问题在这里已经有了答案:

  • 正确使用IDisposable接口18的答案

  • Dispose正在被调用,但它并没有做任何事情去销毁对象本身(你会注意到框架内的很多IDiposable类还有一个IsDisposed属性来表明非托管资源是否已经被释放)


    您仍然可以访问它,因为您已将其定义在using块的范围之外,因为您尚未将其设置为空。

    请注意, using不会将对象设置为null,它只是意味着将调用Dispose()方法,这将为您提供合同保证的方式来处置任何非托管资源,否则这些资源将不会被垃圾回收器清理。

    你还应该考虑你的陈述的逻辑:

    我相信,使用块自动调用处理方法。 所以,如果我使用block创建一个新实例,它将在现有的使用block之后进行处理。

    ...一个对象如何将它自己设置为null?


    来自MSDN

    IDisposable接口

    提供释放非托管资源的机制。

    该接口的主要用途是释放非托管资源。 当垃圾收集器不再使用时,垃圾收集器会自动释放分配给管理对象的内存。 但是,无法预测垃圾收集何时发生。 此外,垃圾收集器不知道非托管资源,如窗口句柄或打开的文件和流。 使用此接口的Dispose方法与垃圾收集器一起显式释放非托管资源。 当对象不再需要时,对象的使用者可以调用此方法。

    这用于释放未损坏的资源而不用于销毁对象本身。

    链接地址: http://www.djcxy.com/p/9239.html

    上一篇: Implementing IDisposable in C#

    下一篇: Calling Dispose method will clear and compact the memory in .Net?