IDisposable — deterministic cleanup of unmanaged resources.
Basic pattern:
1public class Resource : IDisposable2{3 private bool _disposed = false;4 private readonly StreamWriter _writer;56 public Resource(string path)7 {8 _writer = new StreamWriter(path);9 }1011 public void Dispose()12 {13 Dispose(true);14 GC.SuppressFinalize(this);15 }1617 protected virtual void Dispose(bool disposing)18 {19 if (!_disposed)20 {21 if (disposing)22 {23 _writer?.Dispose();24 }25 _disposed = true;26 }27 }2829 ~Resource() => Dispose(false);30}
using statement:
1using var resource = new Resource("file.txt");2resource.Write("Hello");3// Dispose called automatically
Resources to dispose: