CA2220:终结器应调用基类的终结器

类型名

FinalizersShouldCallBaseClassFinalizer

CheckId

CA2220

类别

Microsoft.Usage

是否重大更改

原因

重写 Object.Finalize 的类型未调用其基类中的 Finalize 方法。

规则说明

终止必须通过继承层次结构传播。 要确保这一点,类型必须从其自身的 Finalize 方法调用它们的基类 Finalize 方法。 C# 编译器自动添加对基类终结器的调用。

如何解决冲突

要修复与该规则的冲突,请从您的 Finalize 方法调用基类型的 Finalize 方法。

何时禁止显示警告

不要禁止显示此规则发出的警告。 某些针对公共语言运行时的编译器会将对基类型终结器的调用插入 Microsoft 中间语言 (MSIL)。 如果报告与该规则有关的警告,则编译器不会插入该调用,您必须将其添加到您的代码中。

示例

下面的 Visual Basic 示例演示正确调用其基类中的 Finalize 方法的 TypeB 类型。

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

请参见

参考

实现 Finalize 和 Dispose 以清理非托管资源