Поделиться через


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

TypeName

FinalizersShouldCallBaseClassFinalizer

CheckId

CA2220

Категория

Microsoft.Usage

Критическое изменение

Не критическое

Причина

Тип, переопределяющий 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

См. также

Другие ресурсы

Implementing Finalize and Dispose