C#
C# Disposable 패턴
하_늘_바_람
2018. 10. 5. 11:12
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판