aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations/Net/DisposableManagedObjectBase.cs
diff options
context:
space:
mode:
authorLuke <luke.pulverenti@gmail.com>2017-08-19 16:06:14 -0400
committerGitHub <noreply@github.com>2017-08-19 16:06:14 -0400
commitff2f3108ee62fc8c943b1d83ec6312d6696990d8 (patch)
tree80f1823f901bdadad6af4fce8d36d9b73f79c0fb /Emby.Server.Implementations/Net/DisposableManagedObjectBase.cs
parent6b077f3f8467caa26388a25e6acd1990d286b5d0 (diff)
parentc58db90c950c766321615eca236557d87b8d1b74 (diff)
Merge pull request #2832 from MediaBrowser/beta
Beta
Diffstat (limited to 'Emby.Server.Implementations/Net/DisposableManagedObjectBase.cs')
-rw-r--r--Emby.Server.Implementations/Net/DisposableManagedObjectBase.cs71
1 files changed, 71 insertions, 0 deletions
diff --git a/Emby.Server.Implementations/Net/DisposableManagedObjectBase.cs b/Emby.Server.Implementations/Net/DisposableManagedObjectBase.cs
new file mode 100644
index 000000000..b18335da7
--- /dev/null
+++ b/Emby.Server.Implementations/Net/DisposableManagedObjectBase.cs
@@ -0,0 +1,71 @@
+using System;
+
+namespace Emby.Server.Implementations.Net
+{
+ /// <summary>
+ /// Correclty implements the <see cref="IDisposable"/> interface and pattern for an object containing only managed resources, and adds a few common niceities not on the interface such as an <see cref="IsDisposed"/> property.
+ /// </summary>
+ public abstract class DisposableManagedObjectBase : IDisposable
+ {
+
+ #region Public Methods
+
+ /// <summary>
+ /// Override this method and dispose any objects you own the lifetime of if disposing is true;
+ /// </summary>
+ /// <param name="disposing">True if managed objects should be disposed, if false, only unmanaged resources should be released.</param>
+ protected abstract void Dispose(bool disposing);
+
+ /// <summary>
+ /// Throws and <see cref="System.ObjectDisposedException"/> if the <see cref="IsDisposed"/> property is true.
+ /// </summary>
+ /// <seealso cref="IsDisposed"/>
+ /// <exception cref="System.ObjectDisposedException">Thrown if the <see cref="IsDisposed"/> property is true.</exception>
+ /// <seealso cref="Dispose()"/>
+ protected virtual void ThrowIfDisposed()
+ {
+ if (this.IsDisposed) throw new ObjectDisposedException(this.GetType().FullName);
+ }
+
+ #endregion
+
+ #region Public Properties
+
+ /// <summary>
+ /// Sets or returns a boolean indicating whether or not this instance has been disposed.
+ /// </summary>
+ /// <seealso cref="Dispose()"/>
+ public bool IsDisposed
+ {
+ get;
+ private set;
+ }
+
+ #endregion
+
+ #region IDisposable Members
+
+ /// <summary>
+ /// Disposes this object instance and all internally managed resources.
+ /// </summary>
+ /// <remarks>
+ /// <para>Sets the <see cref="IsDisposed"/> property to true. Does not explicitly throw an exception if called multiple times, but makes no promises about behaviour of derived classes.</para>
+ /// </remarks>
+ /// <seealso cref="IsDisposed"/>
+ public void Dispose()
+ {
+ try
+ {
+ IsDisposed = true;
+
+ Dispose(true);
+ }
+ finally
+ {
+ GC.SuppressFinalize(this);
+ }
+ }
+
+ #endregion
+ }
+}