我目前正在分析的代码上获得CA2202(不要多次处理对象)。警告指的HttpApplication.Dispose
是我要覆盖的方法。我知道该IDispose.Dipose
方法不应该是虚拟的或被覆盖,但这是微软IDispose.Dispose
在类中实现 as virtualHttpApplication
而没有提供虚拟的受保护的 Dispose 方法的结果。
该警告似乎在抱怨该base.Dispose
方法的调用。如果基类需要关闭或处置任何对象,我将调用基 Dispose 方法。并且还怀疑我最终可能会收到 CA2215(Dispose 方法应调用基类 dispose)警告,否则。
有谁知道我为什么会收到此(CA2202)警告以及如何处理?
我很想压制它,但MSDN 文档说它永远不应该被压制。
子类如下所示(为简洁起见已将其缩短,您可以假设该_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;
}
}
}