【发布时间】:2015-05-14 11:33:54
【问题描述】:
我目前正在分析的代码中收到CA2202(不要多次处理对象)。警告指的是我正在覆盖的HttpApplication.Dispose 方法。我知道IDispose.Dipose 方法不应该是虚拟的或被覆盖,但这是因为微软在HttpApplication 类中将IDispose.Dispose 实现为虚拟并且没有提供虚拟的受保护的Dispose 方法。
警告似乎是在抱怨base.Dispose 方法的调用。如果基类需要关闭或处置任何对象,我将调用基 Dispose 方法。并且还怀疑我最终可能会收到CA2215(Dispose 方法应该调用基类 dispose)警告。
有谁知道我为什么收到此 (CA2202) 警告以及如何处理?
我很想压制它,但MSDN docs 说永远不应该压制它。
子类如下所示(为简洁起见,已将其缩短,您可以假设 _container 字段已被初始化):
public class MyHttpApplication : HttpApplication
{
private bool _disposed;
private IDisposable _container;
public sealed override void Dispose()
{
if (_disposed)
return;
try
{
Dispose(true);
GC.SuppressFinalize(this);
}
finally
{
//The following lines is what causes the CA2202 code analysis warning
base.Dispose();
}
}
protected virtual void Dispose(bool disposing)
{
if (_disposed)
return;
try
{
if (disposing && _container != null)
{
_container.Dispose();
}
}
finally
{
_disposed = true;
}
}
}
【问题讨论】:
标签: c# dispose httpapplication ca2202