CA2215: Dispose メソッドから基本クラスの破棄を呼び出します

TypeName

DisposeMethodsShouldCallBaseClassDispose

CheckId

CA2215

分類

Microsoft.Usage

互換性に影響する変更点

なし

原因

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);
        }
    }
}

型 TypeA から継承し、Dispose メソッドを正しく呼び出す型 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

参照

関連項目

IDisposable

その他の技術情報

Implementing Finalize and Dispose