IDisposable — cleanup unmanaged resources.
Basic implementation:
1public class MyResource : IDisposable2{3 private bool _disposed = false;4 private IntPtr _handle;56 public void Dispose()7 {8 Dispose(true);9 GC.SuppressFinalize(this);10 }1112 protected virtual void Dispose(bool disposing)13 {14 if (!_disposed)15 {16 if (disposing) { /* Free managed */ }17 CloseHandle(_handle); // Free unmanaged18 _disposed = true;19 }20 }2122 ~MyResource() { Dispose(false); }23}
Using statement:
1using var resource = new MyResource();2// resource.Dispose() called automatically
Key: Implement Dispose for cleanup.