CA2220: методы завершения должны вызывать метод завершения базового класса

Товар Значение
Идентификатор правила CA2220
Категория Microsoft.Usage
Критическое изменение Не критическое

Причина

Тип, который переопределяет System.Object.Finalize метод, не вызывает Finalize метод в базовом классе.

Примечание.

Это правило устарело. Дополнительные сведения см. в разделе "Устаревшие правила".

Описание правила

Финализация должна распространятся посредством иерархии наследования. Чтобы обеспечить это, типы должны вызывать метод базового класса Finalize из собственного Finalize метода. Компилятор C# автоматически добавляет вызов к методу завершения базового класса.

Устранение нарушений

Чтобы устранить нарушение этого правила, вызовите метод базового типа Finalize из Finalize метода.

Когда лучше отключить предупреждения

Для этого правила отключать вывод предупреждений не следует. Некоторые компиляторы, предназначенные для среды CLR, вставляют вызов к методу завершения базового типа в промежуточный язык Майкрософт (MSIL). Если сообщается предупреждение из этого правила, компилятор не вставляет вызов, и его необходимо добавить в код.

Пример

В следующем примере Visual Basic показан тип TypeB , который правильно вызывает Finalize метод в базовом классе.

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

См. также