CA2220: ファイナライザーは基本クラスのファイナライザーを呼び出さなければなりません

TypeName

FinalizersShouldCallBaseClassFinalizer

CheckId

CA2220

カテゴリ

Microsoft.Usage

互換性に影響する変更点

なし

原因

Object.Finalize をオーバーライドする型が、その基本クラスの Finalize メソッドを呼び出していません。

規則の説明

終了処理は、継承の階層構造を使用して反映する必要があります。 この場合、型は、型の Finalize メソッド内から、基本クラスの Finalize メソッドを呼び出す必要があります。 C# コンパイラでは、基本クラスのファイナライザーへの呼び出しが自動的に追加されます。

違反の修正方法

この規則違反を修正するには、Finalize メソッドからその基本型の Finalize メソッドを呼び出します。

警告を抑制する状況

この規則による警告は抑制しないでください。 共通言語ランタイムを対象にするコンパイラでは、基本タイプのファイナライザーの呼び出しを Microsoft Intermediate Language (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 の実装