Интерфейс IDisposable в C#
Что такое интерфейс IDisposable, зачем он нужен и как его реализовать? Как в методе Dispose освобождать занятые ресурсы?
Источник: Stack Overflow на русском
Что такое интерфейс IDisposable, зачем он нужен и как его реализовать? Как в методе Dispose освобождать занятые ресурсы?
Обычно 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();
}
}