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