我创建了一个继承自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:
我可以接受答案,但是第一个代码示例正确吗?
答案 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
意味着不需要处置,那么您的初始代码就可以了,只需禁用警告即可。