Should IDisposable.Dispose() be made safe to call multiple times?

.net, c#, idisposable

Solution

You should be safe to call it more than once, though you should probably avoid it if you can.

From the MSDN page on `IDisposable.Dispose()`:

If an object's Dispose method is called more than once, the object must ignore all calls after the first one. The object must not throw an exception if its Dispose method is called multiple times.

Problem

Should implementations of `IDisposable` make `Dispose()` safe to call multiple times? Or the opposite? What approach to most .NET Framework classes take? Specifically, is it safe to call `System.Data.Linq.DataContext.Dispose()` multiple times? The reason I ask is because I am wondering if this extra protection is necessary: ``` public override void Dispose(bool disposing) { // Extra protection... if (this.obj != null) { this.obj.Dispose(); this.obj = null; } // Versus simply... this.obj.Dispose(); base.Dispose(disposing); } ``` when disposing `IDisposable` members of a class, or whether I should just call `this.obj.Dispose()` without concern for whether it has been previously called.

Original source