C# 处置问题,是否应忽略Visual Studio警告?
我创建了一个从面板继承的用户控件。 我有一堆钢笔和刷子,VS警告我CA2213:应处理一次性字段 我有这个方法:C# 处置问题,是否应忽略Visual Studio警告?,c#,winforms,dispose,C#,Winforms,Dispose,我创建了一个从面板继承的用户控件。 我有一堆钢笔和刷子,VS警告我CA2213:应处理一次性字段 我有这个方法: protected override void Dispose(bool disposing) { if (disposing && (components != null)) { myPen?.Dispose(); myBrush?.Dispose(); // etc... compon
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
myPen?.Dispose();
myBrush?.Dispose();
// etc...
components.Dispose();
}
base.Dispose(disposing);
}
我做错了什么?谢谢你的回答
编辑:
我通过覆盖my user控件中的Dispose并释放所有IDisposable字段来抑制警告
protected new void Dispose()
{
if (!disposed)
{
myPen?.Dispose();
// etc..
disposed = true;
}
base.Dispose(disposed);
}
请让我知道,如果我做的事情是正确的
编辑2:
我可以接受答案,但是第一个代码示例正确吗
if (disposing && (components != null))
从类如何工作的其他知识来看,组件为null意味着不需要其他处理,这可能是完全合理的,但是给出警告的分析不会捕捉到这一点
protected new void Dispose()
这是无用的,因为它不会被调用
我可能会选择:
protected override void Dispose(bool disposing)
{
if (disposing)
{
myPen?.Dispose();
myBrush?.Dispose();
// etc...
components?.Dispose();
}
base.Dispose(disposing);
}
尽管注意到了?。而一个非常好的想法有时也会给出错误的警告。o如果您知道components==null意味着不需要处理,那么您的初始代码就可以了,只需禁用警告。为什么components会为null,为什么不允许处理其他字段?因为类是部分的,并且代码已经生成,所以只需将disposed调用添加到绘图材料中即可,卸下组件!=null和更改组件。处置;对组件?进行处理;同样的结果,但我知道如何删除警告。我编辑了我的帖子。欢迎任何有建设性的评论:您的新代码隐藏了Dispose方法,而不是重写它。它永远不会被呼叫。谢谢你的回复。是的,我已经删除了那个部分,因为我只有一个计时器的容器,我使用了System.Timers.Timer来代替,并使用了那个方法。解决了,非常感谢!