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
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по