관리되지 않는 리소스 제어

객체가 더 이상 필요하지 않을 때 해제해야 하는 관리되지 않는 리소스가 포함된 클래스에서

이 인터페이스를 구현한다. 인터페이스는 객체가 보유한 리소스를 해제하는 Dispose() 메서드를

구현해야 한다.

public class MyClass : IDisposable
{
    private IntPtr unmanagedResource;

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool disposing)
    {
        if (disposing)
        {
            // Release managed resources here
        }

        // Release unmanaged resources here
        if (unmanagedResource != IntPtr.Zero)
        {
            Marshal.FreeHGlobal(unmanagedResource);
            unmanagedResource = IntPtr.Zero;
        }
    }
}

이 예제에서 MyClass 클래스는 IDisposable 인터페이스를 구현하여 관리되지 않는 리소스를 해제합니다.

'Dispose' 메서드는 관리되는 리소스와 관리되지 않는 리소스를 모두 해제하는 보호된 가상 'Dispose'

메서드를 호출합니다.