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(); |