표준 Dispose 패턴
public class MyResourceHog :IDisposable
{
//이미dispose되었는지의 여부를 저장하기 위한 플래그
private bool _alreadyDisposed = false;
//finalizer
//virtual Dispose 메서드를 호출한다.
~MyResourceHog()
{
Dispose(false);
}
//IDisposable Interface의 구현
//virtual Dispose메서드를 호출하고
//Finalization이 수행되지 않도록한다.
public void Dispose()
{
Dispose(true);
GC.SupressFinalize(true);
}
//virtual Dispose 메서드
protected virtual void Dispose(bool isDisposing)
{
//여려번 dispose를 수행하지 않도록 한다.
if (_alreadyDisposed)
return;
if (isDisposing)
{
//해야할 일: managed 리소스를 해제한다.
}
//해야할 일:unmanaged 리소스를 해제한다.
//dispose 플래그를 설정한다.
_alreadyDispose = true;
}
}
public class DerivedResourceHog : MyResourceHog
{
private bool _disposed = false;
protected override void Dispose(bool isDisposing)
{
//여러번dispose를 수행하지 않도록 한다.
if(_disposde)
return;
if(isDisposing)
{
//해야할일: managed 리소스를 해제한다.
}
// 해야할일: unmanaged 리소스를 해제한다.
//기반 class가 자신의 리소스를 해제할 수 있도록 한다.
//기반 class는
//GC.SuppressFinalize()를 호출할 책임이 있다.
base.Dispose(isDisposing);
//하위class의 dispose 플래그를 설정한다.
_dispose = true;
}
}
[출처] 표준 Dispose 패턴|작성자 joose2
'Programming > C#' 카테고리의 다른 글
PropertyGrid and Drop Down properties (0) | 2011.11.02 |
---|---|
[오류] 컨트롤에 최상위 컨트롤을 추가할 수 없습니다. (0) | 2011.10.31 |
PropertyGrid Attribute FileSelectorTypeEditor (0) | 2011.10.27 |
C#을 이용한 PropertyGrid 사용법에 대한 Summary (0) | 2011.10.27 |
PropertyGrid 컨트롤 최대 활용 (0) | 2011.10.26 |