블로그 이미지
Every unexpected event is a path to learning for you.

카테고리

분류 전체보기 (2731)
Unity3D (814)
Programming (474)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (228)
협업 (57)
3DS Max (3)
Game (12)
Utility (136)
Etc (96)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (51)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday
03-29 07:22

표준 Dispose 패턴

Programming/C# / 2011. 10. 31. 11:11

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

반응형
Posted by blueasa
, |