-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathDisposableBase.cs
More file actions
94 lines (83 loc) · 2.27 KB
/
Copy pathDisposableBase.cs
File metadata and controls
94 lines (83 loc) · 2.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ControlLibrary
{
/// <summary>
/// Dispose模式的代码实现
/// Dispose Pattern
/// </summary>
public class DisposableBase : IDisposable
{
/// <summary>
/// 避免被释放多次的标记
/// </summary>
private bool disposed = false;
/// <summary>
/// 无参构造
/// </summary>
public DisposableBase()
{
}
/// <summary>
/// 真正执行Dispose的虚方法
/// 以便子类对自己的资源进行适当的清理
/// </summary>
/// <param name="disposing"></param>
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
// 释放非托管资源
// 如引用对象, 数组等
}
// 释放托管资源, 如文件, Socket连接等
disposed = true;
}
}
/// <summary>
/// 清理资源的方法
/// </summary>
public void Dispose()
{
Dispose(true);
// 通知系统不需要再调用该对象的终结器
GC.SuppressFinalize(this);
}
/// <summary>
/// 终结器
/// 有.NetGC自动调用
/// 具有不确定性
/// Finalizer
/// </summary>
~DisposableBase()
{
// 若调用者没有手动的进行
// 资源的回收, 则有系统GC进行回收
Dispose(false);
}
}
// 如何继承该基础类
/*public class DerivedDisposeObj : DisposableBase
{
private bool isSelfDisposed = false;
protected override void Dispose(bool disposing)
{
if (!isSelfDisposed)
{
if (disposing)
{
// 释放托管资源的代码
}
// 释放非托管资源的代码
base.Dispose(disposing);
// 进行标记
isSelfDisposed = true;
}
}
}*/
}