处理问题,我应该忽略Visual Studio警告吗?

时间:2018-11-25 18:35:21

标签: c# winforms dispose

我创建了一个继承自Panel的用户控件。 我有一堆钢笔刷,而VS警告我(CA2213:应处置一次性场地)

我有这种方法:

protected override void Dispose(bool disposing)
{
    if (disposing && (components != null))
    {
        myPen?.Dispose();
        myBrush?.Dispose();
        // etc...
        components.Dispose();
    }
    base.Dispose(disposing);
}

我做错了什么?谢谢您的回答!

编辑:

我通过覆盖用户控件中的Dispose()并释放了那里的所有IDisposable字段来抑制了警告。

protected new void Dispose() 
{
    if (!disposed)
    {
       myPen?.Dispose();
       // etc..
       disposed = true;
    }

    base.Dispose(disposed);
}

请让我知道我是否做对了!

编辑#2:

我可以接受答案,但是第一个代码示例正确吗?

1 个答案:

答案 0 :(得分:0)

if (disposing && (components != null))

components为null表示类如何工作的其他知识中可以完全理解,这意味着不需要进行其他处理,但是给出警告的分析将不能理解这一点。

protected new void Dispose()

这是没有用的,因为在处理时不会调用它。

我可能会去

protected override void Dispose(bool disposing)
{
    if (disposing)
    {
        myPen?.Dispose();
        myBrush?.Dispose();
        // etc...
        components?.Dispose();
    }

    base.Dispose(disposing);
}

尽管请注意,?.虽然是一个很好的主意,但有时也会发出错误的警告。 OTOH如果您愿意知道components == null意味着不需要处置,那么您的初始代码就可以了,只需禁用警告即可。