为什么 winform 处置方法缺少"检测冗余调用"?



为什么winform Dispose方法缺少"检测冗余调用">

Winform now 处置方法:

   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;
        }
    }

有两个合理的立场可以采取。

  • Dispose可以调用两次。文档支持这一点,并表明无需进行disposedValue检查。

  • Dispose不应该被称为两次。但是,表格也不应该被处理两次,如果不是,同样不需要你的disposedValue检查。

仅当某个子对象具有要解决的Dispose的错误实现时,Dispose内部的disposedValue检查才有意义。

只有当你

有自己的元素要释放时,你才需要有一个disposedValue或其他机制,托管或非托管无关紧要。

如果你对Dispose所做的唯一工作是调用其他人的Dispose你不需要做任何事情,因为它们将允许重入(如果它们被正确实现(。

因此,在这种特殊情况下,您编写了不需要使用"disposedValue"标志。

话虽如此,Dispose 最常见的实现模式包含这样的标志(作为能够从继承者使用它的受保护属性(。

最新更新