다음을 통해 공유


CA2215: Dispose 메서드는 기본 클래스 Dispose를 호출해야 합니다.

TypeName

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

다음 예제에서는 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

참고 항목

참조

Finalize 및 Dispose를 구현하여 관리되지 않는 리소스 정리

System.IDisposable