为什么调用Dispose()后isdispose返回false ?

本文关键字:isdispose 返回 false 调用 Dispose 为什么 | 更新日期: 2023-09-27 18:02:20

我试图从ToolStripDropDownButton清除所有项目。因为它们是可丢弃的,所以我对它们每个调用dispose方法。但是我看到在调用dispose()方法之后,isdispose属性仍然返回false。为什么是这样,我如何检查是否Dispose()在任何对象上调用?在我目前的项目中,这不是一个问题(我希望),但我真的很想知道这里发生了什么。

我的代码到目前为止:

private void ClearDropDownAccessConnections()
{
    ToolStripItem button = null;
    for (int i = toolStripDropDownButtonAccess.DropDownItems.Count - 1; i > 0; i--)
    {
        button = toolStripDropDownButtonAccess.DropDownItems[i] as ToolStripItem;
        if ((button.Tag != null) && ((int)button.Tag == 10))
        {
            toolStripDropDownButtonAccess.DropDownItems.Remove(button);
            button.Dispose();
            //IF I CHECk HERE THEN button.IsDisposed IS STILL FALSE                }
        }
    }

为什么调用Dispose()后isdispose返回false ?

无论他们的原因是什么,最初的。net开发人员决定仅在处置的ToolStripItem具有非空的Owner属性(您之前亲切地间接设置为null行)时才翻转IsDisposed标志。这似乎没有任何进一步的影响-也就是说,你可以假设ToolStripItem是安全处置的,尽管这种奇怪的行为。

至于你更广泛的问题- IDisposable接口没有提供任何检查对象是否被处置的方法(更糟糕的是-实现它的类不必保证在多次调用时无异常执行(参见MSDN))。如果对象实际上被处理了,你需要依赖类的开发人员来提供一些信息(可以在ToolStripItem的例子中看到,这不是一个傻瓜的方法),或者在你的代码中以某种方式跟踪这一点。

说了这么多,这在现实生活中很少成为问题(尽管意识到这一点很有用)。