comparison Implab/Disposable.cs @ 50:f8cbe84cfdb1

Слияние с interactive logger
author cin
date Fri, 18 Apr 2014 12:37:48 +0400
parents d9d794b61bb9
children 673947ce458a
comparison
equal deleted inserted replaced
44:e5ec543feee3 50:f8cbe84cfdb1
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();