Mercurial > pub > ImplabNet
comparison Implab/Disposable.cs @ 48:d9d794b61bb9 interactive logger
Interactive tracing
Improved working with tracing contexts
| author | cin |
|---|---|
| date | Fri, 18 Apr 2014 12:34:45 +0400 |
| parents | fe33f4e02ad5 |
| children | 673947ce458a |
comparison
equal
deleted
inserted
replaced
| 47:b181f7bcb259 | 48:d9d794b61bb9 |
|---|---|
| 1 using System; | 1 using Implab.Diagnostics; |
| 2 using System; | |
| 2 using System.Collections.Generic; | 3 using System.Collections.Generic; |
| 3 using System.Diagnostics; | 4 using System.Diagnostics; |
| 4 using System.Linq; | 5 using System.Linq; |
| 5 using System.Web; | 6 using System.Web; |
| 6 | 7 |
| 7 namespace Implab { | 8 namespace Implab { |
| 9 /// <summary> | |
| 10 /// Объект, поддерживающий освобождение ресурсов. | |
| 11 /// </summary> | |
| 8 public class Disposable : IDisposable { | 12 public class Disposable : IDisposable { |
| 9 | 13 |
| 10 bool m_disposed; | 14 bool m_disposed; |
| 11 | 15 |
| 12 public event EventHandler Disposed; | 16 public event EventHandler Disposed; |
| 17 | 21 |
| 18 protected void AssertNotDisposed() { | 22 protected void AssertNotDisposed() { |
| 19 if (m_disposed) | 23 if (m_disposed) |
| 20 throw new ObjectDisposedException(this.ToString()); | 24 throw new ObjectDisposedException(this.ToString()); |
| 21 } | 25 } |
| 22 | 26 /// <summary> |
| 27 /// Переводит объект в состояние <c>Disposed</c> и вызывает событие <see cref="Disposed"/> | |
| 28 /// </summary> | |
| 29 /// <param name="disposing">Признак того, что нужно освободить ресурсы, иначе данный метод | |
| 30 /// вызван сборщиком мусора и нужно освобождать ТОЛЬКО неуправляемые ресурсы ТОЛЬКО этого | |
| 31 /// объекта.</param> | |
| 32 /// <remarks> | |
| 33 /// Данный метод осуществляет проверку того, что объект уже был освобожден, чтобы не вызывать | |
| 34 /// событие <see cref="Disposed"/>. Не поддерживает многопоточность. | |
| 35 /// </remarks> | |
| 23 protected virtual void Dispose(bool disposing) { | 36 protected virtual void Dispose(bool disposing) { |
| 24 if (disposing && !m_disposed) { | 37 if (disposing && !m_disposed) { |
| 25 m_disposed = true; | 38 m_disposed = true; |
| 26 | 39 |
| 27 EventHandler temp = Disposed; | 40 EventHandler temp = Disposed; |
| 32 public void Dispose() { | 45 public void Dispose() { |
| 33 Dispose(true); | 46 Dispose(true); |
| 34 GC.SuppressFinalize(this); | 47 GC.SuppressFinalize(this); |
| 35 } | 48 } |
| 36 | 49 |
| 50 /// <summary> | |
| 51 /// Записывает сообщение об утечке объекта. | |
| 52 /// </summary> | |
| 37 protected virtual void ReportObjectLeaks() { | 53 protected virtual void ReportObjectLeaks() { |
| 38 Trace.TraceWarning("The object is marked as disposable but isn't disposed properly: {0}", this); | 54 TraceLog.TraceWarning("The object is marked as disposable but isn't disposed properly: {0}", this); |
| 39 } | 55 } |
| 40 | 56 |
| 41 ~Disposable() { | 57 ~Disposable() { |
| 42 Dispose(false); | 58 Dispose(false); |
| 43 ReportObjectLeaks(); | 59 ReportObjectLeaks(); |
