有很多博客,SO问题告诉你如何知道对象是否已被处置.例如.使用IsDisposed属性可用于某些类.
我想知道:
>假设IsDisposed返回true,如果对象已经被释放,为什么我们被允许在其上调用IsDisposed属性?
>如果我们可以访问其财产,我们怎么能说对象已经死亡或丢弃或处置? (你是不是通过调用它的属性来引用它?!)
更新#1:
我在几个答案之后跟进了一些问题,说“Disposed并不意味着对象已经死了;它只是意味着它所持有的任何未经纳入的资源都被释放了.”:
>这是否意味着Disposed不是说这个物体被处置了?
>如果Disposed对象本身没有死,为什么我们得到ObjectDisposedException? (这不是说这个物体不能再使用了吗?)
解决方法:
“Disposed”只是简称“IDisposable.Dispose”.这通常(但不是唯一地)用于表示它已经释放了它可能持有的任何非托管资源.
它与垃圾收集无关,并不意味着对象“死”或“扔掉”.
UPDATE
Does that mean that Disposed is not saying that this object is disposed?
不,这意味着它被处置,即它已经释放了它的非托管资源.
If the Disposed object itself is not dead, why do we get ObjectDisposedException ? (Does not it mean that this object cannot be used any longer? )
由每个Type决定何时抛出ObjectDisposedException.但是,当您尝试访问需要已释放的非托管资源的成员时,通常会抛出它.在处理对象之后,对于每个成员访问都抛出ObjectDisposedException通常是不正确的.
举一个简单的例子,如果你有一个处置的FileStream(即文件被关闭):
>尝试调用,例如,ReadByte将抛出ObjectDisposedException,因为您无法读取未打开的文件.
>但您仍然可以访问Name属性,该属性提供传递给FileStream构造函数的名称,并且不需要访问非托管资源(基础文件).