namespace View_by_Distance.FaceRecognitionDotNet.Models; /// <summary> /// Represents a class which has managed or unmanaged resources. /// </summary> public abstract class DisposableObject : IDisposable { #region Properties /// <summary> /// Gets a value indicating whether this instance has been disposed. /// </summary> /// <returns>true if this instance has been disposed; otherwise, false.</returns> public bool IsDisposed { get; private set; } #endregion #region Methods /// <summary> /// If this object is disposed, then <see cref="ObjectDisposedException"/> is thrown. /// </summary> public void ThrowIfDisposed() => ObjectDisposedException.ThrowIf(IsDisposed, this); internal void ThrowIfDisposed(string objectName) { #pragma warning disable CA1513 if (IsDisposed) throw new ObjectDisposedException(objectName); #pragma warning restore CA1513 } #region Overrides /// <summary> /// Releases all managed resources. /// </summary> protected virtual void DisposeManaged() { } /// <summary> /// Releases all unmanaged resources. /// </summary> protected virtual void DisposeUnmanaged() { } #endregion #endregion #region IDisposable Members /// <summary> /// Releases all resources used by this <see cref="DisposableObject"/>. /// </summary> public void Dispose() { GC.SuppressFinalize(this); Dispose(true); } /// <summary> /// Releases all resources used by this <see cref="DisposableObject"/>. /// </summary> /// <param name="disposing">Indicate value whether <see cref="IDisposable.Dispose"/> method was called.</param> private void Dispose(bool disposing) { if (IsDisposed) { return; } IsDisposed = true; if (disposing) DisposeManaged(); DisposeUnmanaged(); } #endregion }