DisposableBase
Base class for implementing IDisposable with double disposal protection.
using System.Threading;
namespace System
{
internal abstract class DisposableBase : IDisposable
{
public abstract class Finalizable : DisposableBase
{
~Finalizable()
{
DisposeInternal(false);
}
}
private int _disposedValue;
protected bool Disposed => _disposedValue != 0;
protected abstract void Dispose(bool disposing);
private void DisposeInternal(bool disposing)
{
if (Interlocked.Exchange(ref _disposedValue, 1) != 1)
Dispose(disposing);
}
public void Dispose()
{
DisposeInternal(true);
GC.SuppressFinalize(this);
}
}
}