CA2220: Finalizers should call base class finalizer

Note

This article applies to Visual Studio 2015. If you're looking for the latest Visual Studio documentation, use the version selector at the top left. We recommend upgrading to Visual Studio 2019. Download it here

TypeName FinalizersShouldCallBaseClassFinalizer
CheckId CA2220
Category Microsoft.Usage
Breaking Change Non Breaking

Cause

A type that overrides System.Object.Finalize does not call the Finalize method in its base class.

Rule Description

Finalization must be propagated through the inheritance hierarchy. To ensure this, types must call their base class Finalize method from within their own Finalize method. The C# compiler adds the call to the base class finalizer automatically.

How to Fix Violations

To fix a violation of this rule, call the base type's Finalize method from your Finalize method.

When to Suppress Warnings

Do not suppress a warning from this rule. Some compilers that target the common language runtime insert a call to the base type's finalizer into the Microsoft intermediate language (MSIL). If a warning from this rule is reported, your compiler does not insert the call, and you must add it to your code.

Example

The following Visual Basic example shows a type TypeB that correctly calls the Finalize method in its base class.

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

See Also

Dispose Pattern