【发布时间】:2010-04-22 00:09:30
【问题描述】:
当我通过 Visual Studio 的代码分析实用程序运行一些代码时收到一条警告,我不确定如何解决。也许这里有人遇到过类似的问题,解决了它,并愿意分享他们的见解。
我正在编写 DataGridView 控件中使用的自定义绘制单元格。代码类似于:
public class DataGridViewMyCustomColumn : DataGridViewColumn
{
public DataGridViewMyCustomColumn() : base(new DataGridViewMyCustomCell())
{
}
它会生成以下警告:
CA2000 : Microsoft.Reliability : 在方法“DataGridViewMyCustomColumn.DataGridViewMyCustomColumn()”中调用 System.IDisposable.Dispose 在对象“new DataGridViewMyCustomCell()”上的所有引用都超出范围。
我知道它在警告我 DataGridViewMyCustomCell(或它继承自的类)实现了 IDisposable 接口,并且应该调用 Dispose() 方法来清理 DataGridViewMyCustomCell 不再声明的任何资源。
我在 Internet 上看到的示例建议使用 using 块来确定对象的生命周期并让系统自动处理它,但是当移入构造函数的主体时无法识别 base,所以我不能在它周围写一个 using 块......我不确定我是否想要这样做,因为这不会指示运行时释放仍然可以稍后在基类中使用的对象吗?
那么我的问题是,代码还可以吗?或者,如何重构它来解决警告?除非确实合适,否则我不想抑制警告。
【问题讨论】:
标签: c# constructor code-analysis reliability ca2000