public class MyResource : IDisposable { private bool disposed = false; public void Dispose() { Dispose(true); GC.SuppressFinalize(this); // Prevent finalizer from running } protected virtual void Dispose(bool disposing) { if (!disposed) { if (disposing) { // Dispose managed resources } // Release unmanaged resources disposed = true; } } ~MyResource() { Dispose(false); // Finalizer only releases unmanaged resources } }📋 Best Practices ✅ Always use using for short-lived disposable objects. ✅ Implement IDisposable if your class owns disposable fields. ✅ Call GC.SuppressFinalize(this) in Dispose() if you have a finalizer. ✅ Make Dispose() idempotent — safe to call multiple times.
Dispose Pattern (Advanced) for both managed and unmanaged resources
🔄 Dispose Pattern (Advanced)
If your class holds both managed and unmanaged resources, implement the full dispose pattern:
0 Comments:
Post a Comment