WeakRefDictionary 类是一个弱引用字典,在该类中 Microsoft 为我们示范了 .NET 中弱引用的用法,希望大家在看这个类时能够注意到这一点。另外,在 ObjectBuilder 中,默认实现的“定位器”也是使用该类作为“底层存储”,它最主要的特点就是不会阻止 CLR 回收该字典中的对象(只要指向该对象的强引用变量的数量为 0)。
1
using System;
2
using System.Collections.Generic;
3
using Microsoft.Practices.ObjectBuilder.Properties;
4
5
namespace Microsoft.Practices.ObjectBuilder
6
{
7
/// <summary>
8
/// 表示使用 "弱引用"
9
/// 保存 "键/值" 中的
10
/// 值的字典。该类支
11
/// 持空引用。
12
/// </summary>
13
/// <remarks>
14
/// <para>
15
/// 该类是一个 "弱引
16
/// 用" 字典类。添加
17
/// 到该类中的对象不
18
/// 会因为该字典中保
19
/// 存了指向该对象的
20
/// 引用变量而不被垃
21
/// 圾收集,换句话说:
22
/// 即使某个对象已经
23
/// 被添加到该字典中,
24
/// CLR 仍然会对该对
25
/// 象执行垃圾收集(
26
/// 如果有其它引用指
27
/// 向该对象,不能被
28
/// 垃圾收集)。
29
/// </para>
30
/// <para>
31
/// 该类是对 <see cref="Dictionary{TKey,TValue}"/>
32
/// 的一个封装,并且
33
/// 它们的使用方式也
34
/// 是一样的,唯一的
35
/// 区别是保存在该字
36
/// 典中的对象会被执
37
/// 行垃圾收集并被清
38
/// 理出字典。下面是
39
/// 该类执行自动清理
40
/// 的时机:
41
///
42
/// 1、获取 Count属性值
43
/// 时。
44
///
45
/// 2、调用 TryGet 函数
46
/// 获取指定键的对象
47
/// 时。
48
/// </para>
49
/// <para>
50
/// "弱引用" 的使用
51
/// 技巧:
52
///
53
/// 1、要操作一个 "弱引
54
/// 用" 指向的对象,
55
/// 应用程序须获取该
56
/// 对象的一个 "强引
57
/// 用" ,然后使用这
58
/// 个 "强引用" 变量
59
/// 操作对象。
60
///
61
/// 2、一旦创建了一个对
62
/// 象的"弱引用",开
63
/// 发人员通常需要将
64
/// 该对象的 "强引用"
65
/// 设置为 null ,否
66
/// 则 CLR将不会对该
67
/// 对象执行垃圾收集。
68
///
69
/// 3、不要直接使用 "弱
70
/// 引用" 的 Target
71
/// 属性操作对象,CLR
72
/// 无法保证两次调用
73
/// Target 属性期间
74
/// 不进行垃圾收集。
75
/// 而一般情况下开发
76
/// 人员希望不执行垃
77
/// 圾收集。
78
/// </para>
79
/// </remarks>
80
/// <typeparam name="TKey">
81
/// 键的类型。
82
/// </typeparam>
83
/// <typeparam name="TValue">
84
/// 值的类型。
85
/// </typeparam>
86
public class WeakRefDictionary<TKey, TValue>
87
{
88
89
字段
97
98
属性
149
150
私有方法
227
228
公有方法
428
429
NullObject 类
442
443
}
444
}
using System;2
using System.Collections.Generic;3
using Microsoft.Practices.ObjectBuilder.Properties;4

5
namespace Microsoft.Practices.ObjectBuilder6
{7
/// <summary>8
/// 表示使用 "弱引用" 9
/// 保存 "键/值" 中的10
/// 值的字典。该类支11
/// 持空引用。12
/// </summary>13
/// <remarks>14
/// <para>15
/// 该类是一个 "弱引16
/// 用" 字典类。添加17
/// 到该类中的对象不18
/// 会因为该字典中保19
/// 存了指向该对象的20
/// 引用变量而不被垃21
/// 圾收集,换句话说:22
/// 即使某个对象已经23
/// 被添加到该字典中,24
/// CLR 仍然会对该对25
/// 象执行垃圾收集(26
/// 如果有其它引用指27
/// 向该对象,不能被28
/// 垃圾收集)。29
/// </para>30
/// <para>31
/// 该类是对 <see cref="Dictionary{TKey,TValue}"/>32
/// 的一个封装,并且33
/// 它们的使用方式也34
/// 是一样的,唯一的35
/// 区别是保存在该字36
/// 典中的对象会被执37
/// 行垃圾收集并被清38
/// 理出字典。下面是39
/// 该类执行自动清理40
/// 的时机:41
/// 42
/// 1、获取 Count属性值43
/// 时。44
/// 45
/// 2、调用 TryGet 函数46
/// 获取指定键的对象47
/// 时。48
/// </para>49
/// <para>50
/// "弱引用" 的使用51
/// 技巧:52
/// 53
/// 1、要操作一个 "弱引54
/// 用" 指向的对象,55
/// 应用程序须获取该56
/// 对象的一个 "强引57
/// 用" ,然后使用这58
/// 个 "强引用" 变量59
/// 操作对象。60
/// 61
/// 2、一旦创建了一个对62
/// 象的"弱引用",开63
/// 发人员通常需要将64
/// 该对象的 "强引用"65
/// 设置为 null ,否66
/// 则 CLR将不会对该67
/// 对象执行垃圾收集。68
/// 69
/// 3、不要直接使用 "弱70
/// 引用" 的 Target71
/// 属性操作对象,CLR72
/// 无法保证两次调用73
/// Target 属性期间74
/// 不进行垃圾收集。75
/// 而一般情况下开发76
/// 人员希望不执行垃77
/// 圾收集。78
/// </para>79
/// </remarks>80
/// <typeparam name="TKey">81
/// 键的类型。82
/// </typeparam>83
/// <typeparam name="TValue">84
/// 值的类型。85
/// </typeparam>86
public class WeakRefDictionary<TKey, TValue>87
{88

89
字段97

98
属性149

150
私有方法227

228
公有方法428

429
NullObject 类442

443
}444
}



浙公网安备 33010602011771号