본문 바로가기
C#

C# Disposable 패턴

by 하_늘_바_람 2018. 10. 5.
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판