Finalizers with Dispose() in C# -
see code sample msdn: (http://msdn.microsoft.com/en-us/library/b1yfkh5e(v=vs.100).aspx)
// design pattern base class. public class base: idisposable { private bool disposed = false; //implement idisposable. public void dispose() { dispose(true); gc.suppressfinalize(this); } protected virtual void dispose(bool disposing) { if (!disposed) { if (disposing) { // free other state (managed objects). } // free own state (unmanaged objects). // set large fields null. disposed = true; } } // use c# destructor syntax finalization code. ~base() { // call dispose(false). dispose (false); } }
in dispose() implementation calls gc.supressfinalize();, provide destructor finalise object.
what point of providing implementation destructor when gc.suppressfinalize() called?
just little bit confused intentions are?
there 2 scenarios:
- your code calls dispose (preferred) , finalizer canceled, eliminating overhead.
- your code 'leaks' object , gc calls finalizer.
Comments
Post a Comment