CA2215: методы Dispose должны вызывать такие же методы базового класса
TypeName |
DisposeMethodsShouldCallBaseClassDispose |
CheckId |
CA2215 |
Категория |
Microsoft.Usage |
Критическое изменение |
Не критическое |
Причина
Тип, который реализует System.IDisposable, наследует от типа, который также реализует IDisposable.Метод Dispose наследующего типа не вызывает метод Dispose родительского типа.
Описание правила
Если тип наследует от удаляемого типа, он должен вызвать метод Dispose базового типа из собственного метода Dispose.Вызов метода базового типа Dispose гарантирует, что освобождаются все ресурсы, созданные базовым типом.
Устранение нарушений
Чтобы устранить нарушение данного правила, вызовите метод base.Dispose из метода Dispose.
Отключение предупреждений
Можно игнорировать предупреждение этого правила, если вызов base.Dispose происходит на более глубоком уровне вызова по сравнению с уровнем проверки правила.
Пример
В следующем примере показан тип TypeA, который реализует объект IDisposable.
using System;
namespace UsageLibrary
{
public class TypeA :IDisposable
{
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
// Dispose managed resources
}
// Free native resources
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
// Disposable types implement a finalizer.
~TypeA()
{
Dispose(false);
}
}
}
В следующем примере показан тип TypeB, который наследуется от типа TypeA и правильно вызывает его метод Dispose.
Imports System
Namespace UsageLibrary
Public Class TypeB
Inherits TypeA
Protected Overrides Sub Finalize()
Try
Dispose(False)
Finally
MyBase.Finalize()
End Try
End Sub
End Class
End Namespace