Lea*_*ner 4 .net c# clr garbage-collection idisposable
有很多博客,SO问题告诉你如何知道对象是否已被处置.例如,使用IsDisposed某些类可用的属性.
我想知道:
IsDisposed正在返回true,如果对象已被处理,我们怎么可以IsDisposed在其上调用属性?更新#1:
我在几个答案之后跟进了一些问题,说" Disposed并不意味着对象已经死了;它只是意味着它所持有的任何未经纳入的资源都被释放了.":
Disposed不是说this对象被处置?Disposed对象本身没有死,为什么我们得到ObjectDisposedException?(这不是说这个物体不能再使用了吗?)"Disposed"只是简称"IDisposable.Dispose".这通常(但不是唯一地)用于表示它已经释放了它可能持有的任何非托管资源.
它与垃圾收集无关,并不意味着对象"死"或"扔掉".
UPDATE
这是否意味着Disposed并不是说这个对象被处理了?
不,这意味着它被处置,即它已经释放了它的非托管资源.
如果Disposed对象本身没有死,为什么我们得到ObjectDisposedException?(这不是说这个物体不能再使用了吗?)
由每个类型决定何时投掷ObjectDisposedException.但是,当您尝试访问需要已释放的非托管资源的成员时,通常会抛出它.在处理对象之后,ObjectDisposedException对于每个成员访问都抛出通常不是真的.
举一个简单的例子,如果你有一个FileStream被处置(即文件被关闭):
例如,试图打电话ReadByte会抛出一个ObjectDisposedException,因为你无法读取未打开的文件.
但您仍然可以访问该Name属性,该属性提供传递给FileStream构造函数的名称,并且不需要访问非托管资源(基础文件).