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