주로 관리되지 않는 리소스를 해제하는데 사용한다. IDisposable를 구현한 뒤 Dispose를 호출하거나 using 키워드에서 사용해 using의 영역을 벗어나면 자동으로 Dispose를 호출하도록 사용하면 된다.
Dispose을 통해 수동으로 리소스를 해제할 수 있게하고, GC.SupressFinalize를 통해 GC에게 개체가 수동으로 삭제되어 더 이상 종료할 필요가 없음을 알린다.
기본 코드
public class DisposableResourceHolder : IDisposable {
private SafeHandle resource; // handle to a resource
public DisposableResourceHolder() {
this.resource = ... // allocates the resource
}
public void Dispose() {
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing) {
if (disposing) {
if (resource!= null) resource.Dispose();
}
}
}