В настоящее время я получаю CA2202 (Не удалять объекты, раз) в коде, который я анализирую. Предупреждение относится к методу HttpApplication.Dispose
, который я переопределяю. Я знаю, что метод IDispose.Dipose
не должен быть виртуальным или переопределяться, но это результат того, что Microsoft реализует IDispose.Dispose
как виртуальный в классе HttpApplication
и не предоставляет виртуальный защищенный метод Dispose.
Предупреждение, похоже, жалуется на вызов метода base.Dispose
. Я вызываю базовый метод Dispose на случай, если базовому классу необходимо закрыть или удалить какие-либо объекты. И также подозреваю, что я, вероятно, закончу с CA2215 (< em>Методы 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;
}
}
}