在C#中实现IDisposable
这个问题在这里已经有了答案:
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?