Интерфейс IDisposable в C#

Рейтинг: 1Ответов: 1Опубликовано: 03.06.2011

Что такое интерфейс IDisposable, зачем он нужен и как его реализовать? Как в методе Dispose освобождать занятые ресурсы?

Ответы

▲ 3Принят

Обычно IDisposable используют в тех случаях, когда автоматическая сборка мусора не работает. Например, если используется доступ к нативным ресурсам через P/Invoke.

public sealed class Handle : IDisposable {
    private GCHandle gch;

    public Handle(Object o) {
        this.gch = GCHandle.Alloc(o);
    }

    private void Close() {
        if (this.gch.IsAllocated) {
            this.gch.Free();
        }
    }

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

    ~Handle() {
        this.Close();
    }
}