Share via


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

请参见

参考

实现 Finalize 和 Dispose 以清理非托管资源

System.IDisposable