终结器应调用基类的终结器
更新:2007 年 11 月
TypeName |
FinalizersShouldCallBaseClassFinalizer |
CheckID |
CA2220 |
类别 |
Microsoft.Usage |
是否重大更改 |
否 |
原因
重写 Object.Finalize 的类型未调用其基类中的 Finalize 方法。
规则说明
终止必须通过继承层次结构传播。要确保这一点,类型必须从其自身的 Finalize 方法调用它们的基类 Finalize 方法。C# 编译器自动添加对基类终结器的调用。
如何修复冲突
要修复与该规则的冲突,请从您的 Finalize 方法调用基类型的 Finalize 方法。
何时禁止显示警告
不要禁止显示此规则发出的警告。某些针对公共语言运行库的编译器会将对基类型终结器的调用插入 Microsoft 中间语言 (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