view Implab/Disposable.cs @ 43:7c2369f580b8

improved tracing, TextListenerBase can be bound to logical operation scope.
author cin
date Wed, 16 Apr 2014 10:12:56 +0400
parents fe33f4e02ad5
children d9d794b61bb9
line wrap: on
line source

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Web;

namespace Implab {
    public class Disposable : IDisposable {
        
        bool m_disposed;

        public event EventHandler Disposed;

        public bool IsDisposed {
            get { return m_disposed; }
        }

        protected void AssertNotDisposed() {
            if (m_disposed)
                throw new ObjectDisposedException(this.ToString());
        }

        protected virtual void Dispose(bool disposing) {
            if (disposing && !m_disposed) {
                m_disposed = true;
                
                EventHandler temp = Disposed;
                if (temp != null) 
                    temp(this,EventArgs.Empty);
            }
        }
        public void Dispose() {
            Dispose(true);
            GC.SuppressFinalize(this);
        }

        protected virtual void ReportObjectLeaks() {
            Trace.TraceWarning("The object is marked as disposable but isn't disposed properly: {0}", this);
        }

        ~Disposable() {
            Dispose(false);
            ReportObjectLeaks();
        }
    }
}