다음을 통해 공유


CA2220: 종료자는 기본 클래스 종료자를 호출해야 합니다.

TypeName

FinalizersShouldCallBaseClassFinalizer

CheckId

CA2220

범주

Microsoft.Usage

변경 수준

주요 변경 아님

원인

Object.Finalize를 재정의하는 형식이 기본 클래스의 Finalize 메서드를 호출하지 않습니다.

규칙 설명

종료는 상속 계층을 통해 전파되어야 합니다. 이를 위해 형식은 자체 Finalize 메서드 내에서 기본 클래스의 Finalize 메서드를 호출해야 합니다. C# 컴파일러에서는 기본 클래스 종료자에 대한 호출을 자동으로 추가합니다.

위반 문제를 해결하는 방법

이 규칙 위반 문제를 해결하려면 현재 Finalize 메서드에서 기본 형식의 Finalize 메서드를 호출합니다.

경고를 표시하지 않는 경우

이 규칙에서는 경고를 표시해야 합니다. 공용 언어 런타임을 대상으로 하는 일부 컴파일러에서는 기본 형식의 종결자에 대한 호출을 MSIL(Microsoft intermediate language)에 삽입합니다. 이 규칙의 경고가 보고되면 컴파일러에서 호출을 삽입하지 않으므로 사용자가 코드에 직접 호출을 삽입해야 합니다.

예제

다음 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

참고 항목

참조

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