共用方式為


CA2220:完成項應該呼叫基底類別完成項

型別名稱

FinalizersShouldCallBaseClassFinalizer

CheckId

CA2220

分類

Microsoft.Usage

中斷變更

不中斷

原因

覆寫 Object.Finalize 的型別不會在它的基底類別中呼叫 Finalize 方法。

規則描述

最終化必須透過繼承階層架構 (Inheritance Hierarchy) 進行傳播。 若要確定這一點,則型別必須從它們自己的 Finalize 方法呼叫基底類別 Finalize。 C# 編譯器會自動將呼叫加入到基底類別完成項。

如何修正違規

若要修正此規則的違規情形,請從您的 Finalize 方法呼叫基底型別的 Finalize 方法。

隱藏警告的時機

請勿隱藏此規則的警告。 有些目標為 Common Language Runtime 的編譯器會將基底型別的完成項插入 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 以清除 Unmanaged 資源