Example

 using System; namespace Samples { public class IDisposableSample: IDisposable { private bool disposed = false; public void Dispose() { lock(this) { if(disposed) return; GC.SuppressFinalize(this); Dispose(true); disposed = true; } } public void Close() { Dispose(); } public void Dispose(bool b) { if(b) { Console.WriteLine("Dispose()/Close() called " + "explicitly by user code"); Console.WriteLine("Do cleanup necessary for " + "this case"); } Console.WriteLine("Do cleanup necessary for finalization"); } ~IDisposableSample() { Dispose(false); } public static void Main() { IDisposableSample ids1 = new IDisposableSample(); IDisposableSample ids2 = new IDisposableSample(); IDisposableSample ids3 = new IDisposableSample(); ids1.Close(); ids2.Dispose(); ...

Get .NET Framework Standard Library Annotated Reference, Volume 1: Base Class Library and Extended Numerics Library now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.