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