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