为什么调用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 }
}
}
无论他们的原因是什么,最初的。net开发人员决定仅在处置的ToolStripItem
具有非空的Owner
属性(您之前亲切地间接设置为null
行)时才翻转IsDisposed
标志。这似乎没有任何进一步的影响-也就是说,你可以假设ToolStripItem
是安全处置的,尽管这种奇怪的行为。
至于你更广泛的问题- IDisposable
接口没有提供任何检查对象是否被处置的方法(更糟糕的是-实现它的类不必保证在多次调用时无异常执行(参见MSDN))。如果对象实际上被处理了,你需要依赖类的开发人员来提供一些信息(可以在ToolStripItem
的例子中看到,这不是一个傻瓜的方法),或者在你的代码中以某种方式跟踪这一点。
说了这么多,这在现实生活中很少成为问题(尽管意识到这一点很有用)。