为什么winform Dispose方法缺少'检测冗余调用'?
现在Winform Dispose方法:
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
为什么不呢?
private bool disposedValue = false; //To detect redundant calls
protected override void Dispose(bool disposing)
{
if (!disposedValue)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
disposedValue = true;
}
}
答案 0 :(得分:3)
有两个合理的立场。
Dispose
可以被调用两次。文档支持此功能,并建议您无需进行disposedValue
检查。
Dispose
不应该被调用两次。但是,表格也不应该被处理两次,如果不是,则同样不需要进行disposedValue
检查。
disposedValue
内的Dispose
检查只有在某个子对象有一个您想要解决的Dispose
错误实现时才有意义。
答案 1 :(得分:0)
只有拥有自己的免费,管理或非托管元素并不重要,才需要disposedValue
或其他机制。
如果您在Dispose
上执行的唯一工作是调用其他Dispose
,则不需要执行任何操作,因为它们将允许重入(如果它们已正确实施)。
所以在这个特殊情况下你写道你不需要使用'disposValue'标志。
已经说过Dispose最常见的实现模式包含这样的标志(作为受保护的属性,能够从继承者使用它)。