public class MyResourceHog : IDisposable
{
private bool alreadyDisposed = false;
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool isDisposing)
{
if (alreadyDisposed)
return;
if (isDisposing)
{
// 관리 리소스 정리
}
// 비관리 리소스 정리
alreadyDisposed = true;
}
public void ExampleMethod()
{
if (alreadyDisposed)
{
// 이미 정리된 객체를 가지고 멤버메소드 호출 시 예외 처리를 한다.
throw new ObjectDisposedException("MyResourceHog",
"Called Example Method on Disposed object.");
}
}
}
public class DerivedResourceHog : MyResourceHog
{
private bool disposed = false;
protected override void Dispose(bool isDisposing)
{
if (disposed)
return;
if (isDisposing)
{
// 관리리소스 제거
}
// 비관리 리소스 제거
base.Dispose(isDisposing);
disposed = true;
}
}
출처 : Effective c# 3판
'C#' 카테고리의 다른 글
테이블 레이아웃에 스크롤바 설정하기 (0) | 2021.03.24 |
---|---|
스프레드와 데이터 테이블 바인딩 후 빈문자열 입력 (0) | 2020.09.09 |