CA2215:Dispose 方法应调用基类的 Dispose
类型名 |
DisposeMethodsShouldCallBaseClassDispose |
CheckId |
CA2215 |
类别 |
Microsoft.Usage |
是否重大更改 |
否 |
原因
实现 System.IDisposable 的类型继承自同时实现 IDisposable 的类型。 继承类型的 Dispose 方法未调用父类型的 Dispose 方法。
规则说明
如果类型继承自可释放类型,则必须从它自己的 Dispose 方法中调用基类型的 Dispose 方法。 调用基类型方法 Dispose 可以确保释放由基类型创建的任何资源。
如何解决冲突
要修复与该规则的冲突,请调用您的 Dispose 方法中的 base.Dispose。
何时禁止显示警告
如果对 base.Dispose 的调用发生在比规则检查更深的调用级别,则可以安全地禁止显示此规则发出的警告。
示例
下面的示例演示实现 IDisposable 的类型 TypeA。
using System;
namespace UsageLibrary
{
public class TypeA :IDisposable
{
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
// Dispose managed resources
}
// Free native resources
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
// Disposable types implement a finalizer.
~TypeA()
{
Dispose(false);
}
}
}
下面的示例演示类型 TypeB,该类型继承自类型 TypeA 并正确地调用其 Dispose 方法。
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