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