1
using System;
2
using System.Collections.Generic;
3![](/Images/OutliningIndicators/None.gif)
4
namespace Microsoft.Practices.ObjectBuilder
5![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
{
6![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
7
/// <see cref="IBuilderPolicy"/>
8
/// 对象的自定义集合。
9
/// </summary>
10
/// <remarks>
11
/// 该类实际上是一个
12
/// 保存 "方针标识/
13
/// 方针" 对的字典。
14
/// 其中 ,"方针标识"
15
/// 包含:方针的类型
16
/// (也叫做 "方针接
17
/// 口" 的类型)、应
18
/// 用该 "方针" 的类
19
/// 型和应用该 "方针"
20
/// 的 Id 。在这里规
21
/// 定:如果 "方针标
22
/// 识" 中只包含 "方
23
/// 针接口" 的类型而
24
/// 其它的信息为 null,
25
/// 则称该 "方针" 为
26
/// 该 "方针接口" 类
27
/// 型的缺省 "方针"。
28
/// </remarks>
29
public class PolicyList
30![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
31![](/Images/OutliningIndicators/InBlock.gif)
32![](/Images/OutliningIndicators/ContractedSubBlock.gif)
字段#region 字段
33
private Dictionary<BuilderPolicyKey, IBuilderPolicy> policies = new Dictionary<BuilderPolicyKey, IBuilderPolicy>();
34
private object lockObject = new object();
35
#endregion
36![](/Images/OutliningIndicators/InBlock.gif)
37![](/Images/OutliningIndicators/ContractedSubBlock.gif)
属性#region 属性
38![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
39
/// 返回当前 "方针列
40
/// 表" 中 "方针" 的
41
/// 数量。
42
/// </summary>
43
public int Count
44![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
45
get
46![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
47
lock (lockObject)
48![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
49
return policies.Count;
50
}
51
}
52
}
53
#endregion
54![](/Images/OutliningIndicators/InBlock.gif)
55![](/Images/OutliningIndicators/ContractedSubBlock.gif)
构造函数#region 构造函数
56![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
57
/// 初始化 <see cref="PolicyList"/> 类新实例。
58
/// </summary>
59
/// <param name="policiesToCopy">
60
/// 要复制到 "方针列
61
/// 表" 中的 "创建方
62
/// 针" 的集合,可以
63
/// 是 null。
64
/// </param>
65
public PolicyList(params PolicyList[] policiesToCopy)
66![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
67
if (policiesToCopy != null)
68![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
69
foreach (PolicyList policyList in policiesToCopy)
70![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
71
AddPolicies(policyList);
72
}
73
}
74
}
75
#endregion
76![](/Images/OutliningIndicators/InBlock.gif)
77![](/Images/OutliningIndicators/ContractedSubBlock.gif)
公有方法#region 公有方法
78![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
79
/// 将指定 "方针列表"
80
/// 中的 "方针" 添加
81
/// (也叫做 "注册")
82
/// 到当前的 "方针列
83
/// 表"。如果 "方针"
84
/// 已经存在,则使用
85
/// 新的 "方针" 替换
86
/// 原有的 "方针"。
87
/// </summary>
88
/// <param name="policiesToCopy">
89
/// 要添加的 "创建
90
/// 方针" 的集合。
91
/// </param>
92
public void AddPolicies(PolicyList policiesToCopy)
93![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
94
lock (lockObject)
95![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
96
if (policiesToCopy != null)
97![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
98
foreach (KeyValuePair<BuilderPolicyKey, IBuilderPolicy> kvp in policiesToCopy.policies)
99![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
100
policies[kvp.Key] = kvp.Value;
101
}
102
}
103
}
104
}
105![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
106
/// 从 "方针列表" 中
107
/// 获取一个指定 "方
108
/// 针"。
109
/// </summary>
110
/// <param name="policyInterface">
111
/// 该 "方针" 注册的
112
/// "方针接口"。
113
/// </param>
114
/// <param name="typePolicyAppliesTo">
115
/// 应用该 "方针" 的
116
/// 类型。
117
/// </param>
118
/// <param name="idPolicyAppliesTo">
119
/// 应用该 "方针" 的
120
/// Id。
121
/// </param>
122
/// <returns>
123
/// "方针列表" 中的
124
/// 方针。如果不存在,
125
/// 则为 null。
126
/// </returns>
127
public IBuilderPolicy Get(
128
Type policyInterface,
129
Type typePolicyAppliesTo,
130
string idPolicyAppliesTo)
131![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
132
BuilderPolicyKey key = new BuilderPolicyKey(policyInterface, typePolicyAppliesTo, idPolicyAppliesTo);
133![](/Images/OutliningIndicators/InBlock.gif)
134
lock (lockObject)
135![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
136
IBuilderPolicy policy;
137
if (policies.TryGetValue(key, out policy))
138![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
139
return policy;
140
}
141![](/Images/OutliningIndicators/InBlock.gif)
142![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//*
143
* 代码走到这里,表
144
* 示指定的 "方针"
145
* 没有找到,这时将
146
* 返回缺省的 "方针"。
147
*/
148
BuilderPolicyKey defaultKey = new BuilderPolicyKey(policyInterface, null, null);
149![](/Images/OutliningIndicators/InBlock.gif)
150
if (policies.TryGetValue(defaultKey, out policy))
151![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
152
return policy;
153
}
154![](/Images/OutliningIndicators/InBlock.gif)
155![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//*
156
* 如果指定的 "方针"
157
* 和缺省的 "方针" 都
158
* 没有找到,则返回空
159
* 引用。
160
*/
161
return null;
162
}
163
}
164![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
165
/// 从 "方针列表" 中
166
/// 获取一个指定 "方
167
/// 针"。
168
/// </summary>
169
/// <param name="typePolicyAppliesTo">
170
/// 应用该 "方针" 的
171
/// 类型。
172
/// </param>
173
/// <param name="idPolicyAppliesTo">
174
/// 应用该 "方针" 的
175
/// Id。
176
/// </param>
177
/// <returns>
178
/// "方针列表" 中的
179
/// 方针。如果不存在,
180
/// 则为 null。
181
/// </returns>
182
/// <typeparam name="TPolicyInterface">
183
/// 该 "方针" 注册的
184
/// "方针接口"。
185
/// </typeparam>
186
public TPolicyInterface Get<TPolicyInterface>(
187
Type typePolicyAppliesTo,
188
string idPolicyAppliesTo) where TPolicyInterface : IBuilderPolicy
189![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
190
return (TPolicyInterface)Get(typeof(TPolicyInterface), typePolicyAppliesTo, idPolicyAppliesTo);
191
}
192![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
193
/// 设置一个指定 "方针"。
194
/// </summary>
195
/// <param name="policyInterface">
196
/// 该 "方针" 要注册
197
/// 的 "方针接口"。
198
/// </param>
199
/// <param name="policy">
200
/// 要注册的 "方针"。
201
/// </param>
202
/// <param name="typePolicyAppliesTo">
203
/// 应用该 "方针" 的
204
/// 类型。
205
/// </param>
206
/// <param name="idPolicyAppliesTo">
207
/// 应用该 "方针" 的
208
/// Id。
209
/// </param>
210
public void Set(
211
Type policyInterface,
212
IBuilderPolicy policy,
213
Type typePolicyAppliesTo,
214
string idPolicyAppliesTo)
215![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
216
BuilderPolicyKey key = new BuilderPolicyKey(policyInterface, typePolicyAppliesTo, idPolicyAppliesTo);
217![](/Images/OutliningIndicators/InBlock.gif)
218
lock (lockObject)
219![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
220
policies[key] = policy;
221
}
222
}
223![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
224
/// 设置一个指定 "方针"。
225
/// </summary>
226
/// <param name="policy">
227
/// 要注册的 "方针"。
228
/// </param>
229
/// <param name="typePolicyAppliesTo">
230
/// 应用该 "方针" 的
231
/// 类型。
232
/// </param>
233
/// <param name="idPolicyAppliesTo">
234
/// 应用该 "方针" 的
235
/// Id。
236
/// </param>
237
/// <typeparam name="TPolicyInterface">
238
/// 该 "方针" 要注册
239
/// 的 "方针接口"。
240
/// </typeparam>
241
public void Set<TPolicyInterface>(
242
TPolicyInterface policy,
243
Type typePolicyAppliesTo,
244
string idPolicyAppliesTo) where TPolicyInterface : IBuilderPolicy
245![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
246
Set(typeof(TPolicyInterface), policy, typePolicyAppliesTo, idPolicyAppliesTo);
247
}
248![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
249
/// 设置一个缺省 "方
250
/// 针"。 当获取一个
251
/// 指定的 "方针" 时,
252
/// 如果没有找到,则
253
/// 返回这个缺省 "方
254
/// 针"。
255
/// </summary>
256
/// <param name="policyInterface">
257
/// 该 "方针" 注册的
258
/// "方针接口"。
259
/// </param>
260
/// <param name="policy">
261
/// 要注册的缺省 "方
262
/// 针"。
263
/// </param>
264
public void SetDefault(
265
Type policyInterface,
266
IBuilderPolicy policy)
267![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
268
Set(policyInterface, policy, null, null);
269
}
270![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
271
/// 设置一个缺省 "方
272
/// 针"。 当获取一个
273
/// 指定的 "方针" 时,
274
/// 如果没有找到,则
275
/// 返回这个缺省 "方
276
/// 针"。
277
/// </summary>
278
/// <param name="policy">
279
/// 要注册的缺省 "方
280
/// 针"。
281
/// </param>
282
/// <typeparam name="TPolicyInterface">
283
/// 该 "方针" 注册的
284
/// "方针接口"。
285
/// </typeparam>
286
public void SetDefault<TPolicyInterface>(TPolicyInterface policy) where TPolicyInterface : IBuilderPolicy
287![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
288
SetDefault(typeof(TPolicyInterface), policy);
289
}
290![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
291
/// 从 "方针列表" 中
292
/// 移除一个指定 "方
293
/// 针"。
294
/// </summary>
295
/// <param name="policyInterface">
296
/// 该 "方针" 注册的
297
/// 类型。
298
/// </param>
299
/// <param name="typePolicyAppliesTo">
300
/// 应用该 "方针" 的
301
/// 类型。
302
/// </param>
303
/// <param name="idPolicyAppliesTo">
304
/// 应用该 "方针" 的
305
/// Id。
306
/// </param>
307
public void Clear(
308
Type policyInterface,
309
Type typePolicyAppliesTo,
310
string idPolicyAppliesTo)
311![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
312
lock (lockObject)
313![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
314
policies.Remove(new BuilderPolicyKey(policyInterface, typePolicyAppliesTo, idPolicyAppliesTo));
315
}
316
}
317![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
318
/// 从 "方针列表" 中
319
/// 移除一个指定 "方
320
/// 针"。
321
/// </summary>
322
/// <param name="typePolicyAppliesTo">
323
/// 应用该 "方针" 的
324
/// 类型。
325
/// </param>
326
/// <param name="idPolicyAppliesTo">
327
/// 应用该 "方针" 的
328
/// Id。
329
/// </param>
330
/// <typeparam name="TPolicyInterface">
331
/// 该 "方针" 注册的
332
/// 类型。
333
/// </typeparam>
334
public void Clear<TPolicyInterface>(
335
Type typePolicyAppliesTo,
336
string idPolicyAppliesTo)
337![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
338
Clear(typeof(TPolicyInterface), typePolicyAppliesTo, idPolicyAppliesTo);
339
}
340![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
341
/// 清除缺省的 "方针"。
342
/// </summary>
343
/// <param name="policyInterface">
344
/// 该缺省 "方针" 注
345
/// 册的类型。
346
/// </param>
347
public void ClearDefault(Type policyInterface)
348![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
349
Clear(policyInterface, null, null);
350
}
351![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
352
/// 清除缺省的 "方针"。
353
/// </summary>
354
/// <typeparam name="TPolicyInterface">
355
/// 该缺省 "方针" 注
356
/// 册的类型。
357
/// </typeparam>
358
public void ClearDefault<TPolicyInterface>()
359![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
360
ClearDefault(typeof(TPolicyInterface));
361
}
362![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
363
/// 清除 "方针列表"
364
/// 中的所有 "方针"。
365
/// </summary>
366
public void ClearAll()
367![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
368
lock (lockObject)
369![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
370
policies.Clear();
371
}
372
}
373
#endregion
374![](/Images/OutliningIndicators/InBlock.gif)
375
}
376
}
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/None.gif)
5
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
6
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
7
![](/Images/OutliningIndicators/InBlock.gif)
8
![](/Images/OutliningIndicators/InBlock.gif)
9
![](/Images/OutliningIndicators/InBlock.gif)
10
![](/Images/OutliningIndicators/InBlock.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/InBlock.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/InBlock.gif)
15
![](/Images/OutliningIndicators/InBlock.gif)
16
![](/Images/OutliningIndicators/InBlock.gif)
17
![](/Images/OutliningIndicators/InBlock.gif)
18
![](/Images/OutliningIndicators/InBlock.gif)
19
![](/Images/OutliningIndicators/InBlock.gif)
20
![](/Images/OutliningIndicators/InBlock.gif)
21
![](/Images/OutliningIndicators/InBlock.gif)
22
![](/Images/OutliningIndicators/InBlock.gif)
23
![](/Images/OutliningIndicators/InBlock.gif)
24
![](/Images/OutliningIndicators/InBlock.gif)
25
![](/Images/OutliningIndicators/InBlock.gif)
26
![](/Images/OutliningIndicators/InBlock.gif)
27
![](/Images/OutliningIndicators/InBlock.gif)
28
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
29
![](/Images/OutliningIndicators/InBlock.gif)
30
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
31
![](/Images/OutliningIndicators/InBlock.gif)
32
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
33
![](/Images/OutliningIndicators/InBlock.gif)
34
![](/Images/OutliningIndicators/InBlock.gif)
35
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
36
![](/Images/OutliningIndicators/InBlock.gif)
37
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
38
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
39
![](/Images/OutliningIndicators/InBlock.gif)
40
![](/Images/OutliningIndicators/InBlock.gif)
41
![](/Images/OutliningIndicators/InBlock.gif)
42
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
43
![](/Images/OutliningIndicators/InBlock.gif)
44
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
45
![](/Images/OutliningIndicators/InBlock.gif)
46
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
47
![](/Images/OutliningIndicators/InBlock.gif)
48
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
49
![](/Images/OutliningIndicators/InBlock.gif)
50
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
51
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
52
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
53
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
54
![](/Images/OutliningIndicators/InBlock.gif)
55
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
56
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
57
![](/Images/OutliningIndicators/InBlock.gif)
58
![](/Images/OutliningIndicators/InBlock.gif)
59
![](/Images/OutliningIndicators/InBlock.gif)
60
![](/Images/OutliningIndicators/InBlock.gif)
61
![](/Images/OutliningIndicators/InBlock.gif)
62
![](/Images/OutliningIndicators/InBlock.gif)
63
![](/Images/OutliningIndicators/InBlock.gif)
64
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
65
![](/Images/OutliningIndicators/InBlock.gif)
66
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
67
![](/Images/OutliningIndicators/InBlock.gif)
68
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
69
![](/Images/OutliningIndicators/InBlock.gif)
70
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
71
![](/Images/OutliningIndicators/InBlock.gif)
72
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
73
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
74
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
75
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
76
![](/Images/OutliningIndicators/InBlock.gif)
77
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
78
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
79
![](/Images/OutliningIndicators/InBlock.gif)
80
![](/Images/OutliningIndicators/InBlock.gif)
81
![](/Images/OutliningIndicators/InBlock.gif)
82
![](/Images/OutliningIndicators/InBlock.gif)
83
![](/Images/OutliningIndicators/InBlock.gif)
84
![](/Images/OutliningIndicators/InBlock.gif)
85
![](/Images/OutliningIndicators/InBlock.gif)
86
![](/Images/OutliningIndicators/InBlock.gif)
87
![](/Images/OutliningIndicators/InBlock.gif)
88
![](/Images/OutliningIndicators/InBlock.gif)
89
![](/Images/OutliningIndicators/InBlock.gif)
90
![](/Images/OutliningIndicators/InBlock.gif)
91
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
92
![](/Images/OutliningIndicators/InBlock.gif)
93
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
94
![](/Images/OutliningIndicators/InBlock.gif)
95
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
96
![](/Images/OutliningIndicators/InBlock.gif)
97
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
98
![](/Images/OutliningIndicators/InBlock.gif)
99
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
100
![](/Images/OutliningIndicators/InBlock.gif)
101
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
102
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
103
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
104
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
105
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
106
![](/Images/OutliningIndicators/InBlock.gif)
107
![](/Images/OutliningIndicators/InBlock.gif)
108
![](/Images/OutliningIndicators/InBlock.gif)
109
![](/Images/OutliningIndicators/InBlock.gif)
110
![](/Images/OutliningIndicators/InBlock.gif)
111
![](/Images/OutliningIndicators/InBlock.gif)
112
![](/Images/OutliningIndicators/InBlock.gif)
113
![](/Images/OutliningIndicators/InBlock.gif)
114
![](/Images/OutliningIndicators/InBlock.gif)
115
![](/Images/OutliningIndicators/InBlock.gif)
116
![](/Images/OutliningIndicators/InBlock.gif)
117
![](/Images/OutliningIndicators/InBlock.gif)
118
![](/Images/OutliningIndicators/InBlock.gif)
119
![](/Images/OutliningIndicators/InBlock.gif)
120
![](/Images/OutliningIndicators/InBlock.gif)
121
![](/Images/OutliningIndicators/InBlock.gif)
122
![](/Images/OutliningIndicators/InBlock.gif)
123
![](/Images/OutliningIndicators/InBlock.gif)
124
![](/Images/OutliningIndicators/InBlock.gif)
125
![](/Images/OutliningIndicators/InBlock.gif)
126
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
127
![](/Images/OutliningIndicators/InBlock.gif)
128
![](/Images/OutliningIndicators/InBlock.gif)
129
![](/Images/OutliningIndicators/InBlock.gif)
130
![](/Images/OutliningIndicators/InBlock.gif)
131
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
132
![](/Images/OutliningIndicators/InBlock.gif)
133
![](/Images/OutliningIndicators/InBlock.gif)
134
![](/Images/OutliningIndicators/InBlock.gif)
135
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
136
![](/Images/OutliningIndicators/InBlock.gif)
137
![](/Images/OutliningIndicators/InBlock.gif)
138
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
139
![](/Images/OutliningIndicators/InBlock.gif)
140
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
141
![](/Images/OutliningIndicators/InBlock.gif)
142
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
143
![](/Images/OutliningIndicators/InBlock.gif)
144
![](/Images/OutliningIndicators/InBlock.gif)
145
![](/Images/OutliningIndicators/InBlock.gif)
146
![](/Images/OutliningIndicators/InBlock.gif)
147
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
148
![](/Images/OutliningIndicators/InBlock.gif)
149
![](/Images/OutliningIndicators/InBlock.gif)
150
![](/Images/OutliningIndicators/InBlock.gif)
151
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
152
![](/Images/OutliningIndicators/InBlock.gif)
153
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
154
![](/Images/OutliningIndicators/InBlock.gif)
155
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
156
![](/Images/OutliningIndicators/InBlock.gif)
157
![](/Images/OutliningIndicators/InBlock.gif)
158
![](/Images/OutliningIndicators/InBlock.gif)
159
![](/Images/OutliningIndicators/InBlock.gif)
160
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
161
![](/Images/OutliningIndicators/InBlock.gif)
162
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
163
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
164
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
165
![](/Images/OutliningIndicators/InBlock.gif)
166
![](/Images/OutliningIndicators/InBlock.gif)
167
![](/Images/OutliningIndicators/InBlock.gif)
168
![](/Images/OutliningIndicators/InBlock.gif)
169
![](/Images/OutliningIndicators/InBlock.gif)
170
![](/Images/OutliningIndicators/InBlock.gif)
171
![](/Images/OutliningIndicators/InBlock.gif)
172
![](/Images/OutliningIndicators/InBlock.gif)
173
![](/Images/OutliningIndicators/InBlock.gif)
174
![](/Images/OutliningIndicators/InBlock.gif)
175
![](/Images/OutliningIndicators/InBlock.gif)
176
![](/Images/OutliningIndicators/InBlock.gif)
177
![](/Images/OutliningIndicators/InBlock.gif)
178
![](/Images/OutliningIndicators/InBlock.gif)
179
![](/Images/OutliningIndicators/InBlock.gif)
180
![](/Images/OutliningIndicators/InBlock.gif)
181
![](/Images/OutliningIndicators/InBlock.gif)
182
![](/Images/OutliningIndicators/InBlock.gif)
183
![](/Images/OutliningIndicators/InBlock.gif)
184
![](/Images/OutliningIndicators/InBlock.gif)
185
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
186
![](/Images/OutliningIndicators/InBlock.gif)
187
![](/Images/OutliningIndicators/InBlock.gif)
188
![](/Images/OutliningIndicators/InBlock.gif)
189
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
190
![](/Images/OutliningIndicators/InBlock.gif)
191
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
192
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
193
![](/Images/OutliningIndicators/InBlock.gif)
194
![](/Images/OutliningIndicators/InBlock.gif)
195
![](/Images/OutliningIndicators/InBlock.gif)
196
![](/Images/OutliningIndicators/InBlock.gif)
197
![](/Images/OutliningIndicators/InBlock.gif)
198
![](/Images/OutliningIndicators/InBlock.gif)
199
![](/Images/OutliningIndicators/InBlock.gif)
200
![](/Images/OutliningIndicators/InBlock.gif)
201
![](/Images/OutliningIndicators/InBlock.gif)
202
![](/Images/OutliningIndicators/InBlock.gif)
203
![](/Images/OutliningIndicators/InBlock.gif)
204
![](/Images/OutliningIndicators/InBlock.gif)
205
![](/Images/OutliningIndicators/InBlock.gif)
206
![](/Images/OutliningIndicators/InBlock.gif)
207
![](/Images/OutliningIndicators/InBlock.gif)
208
![](/Images/OutliningIndicators/InBlock.gif)
209
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
210
![](/Images/OutliningIndicators/InBlock.gif)
211
![](/Images/OutliningIndicators/InBlock.gif)
212
![](/Images/OutliningIndicators/InBlock.gif)
213
![](/Images/OutliningIndicators/InBlock.gif)
214
![](/Images/OutliningIndicators/InBlock.gif)
215
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
216
![](/Images/OutliningIndicators/InBlock.gif)
217
![](/Images/OutliningIndicators/InBlock.gif)
218
![](/Images/OutliningIndicators/InBlock.gif)
219
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
220
![](/Images/OutliningIndicators/InBlock.gif)
221
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
222
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
223
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
224
![](/Images/OutliningIndicators/InBlock.gif)
225
![](/Images/OutliningIndicators/InBlock.gif)
226
![](/Images/OutliningIndicators/InBlock.gif)
227
![](/Images/OutliningIndicators/InBlock.gif)
228
![](/Images/OutliningIndicators/InBlock.gif)
229
![](/Images/OutliningIndicators/InBlock.gif)
230
![](/Images/OutliningIndicators/InBlock.gif)
231
![](/Images/OutliningIndicators/InBlock.gif)
232
![](/Images/OutliningIndicators/InBlock.gif)
233
![](/Images/OutliningIndicators/InBlock.gif)
234
![](/Images/OutliningIndicators/InBlock.gif)
235
![](/Images/OutliningIndicators/InBlock.gif)
236
![](/Images/OutliningIndicators/InBlock.gif)
237
![](/Images/OutliningIndicators/InBlock.gif)
238
![](/Images/OutliningIndicators/InBlock.gif)
239
![](/Images/OutliningIndicators/InBlock.gif)
240
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
241
![](/Images/OutliningIndicators/InBlock.gif)
242
![](/Images/OutliningIndicators/InBlock.gif)
243
![](/Images/OutliningIndicators/InBlock.gif)
244
![](/Images/OutliningIndicators/InBlock.gif)
245
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
246
![](/Images/OutliningIndicators/InBlock.gif)
247
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
248
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
249
![](/Images/OutliningIndicators/InBlock.gif)
250
![](/Images/OutliningIndicators/InBlock.gif)
251
![](/Images/OutliningIndicators/InBlock.gif)
252
![](/Images/OutliningIndicators/InBlock.gif)
253
![](/Images/OutliningIndicators/InBlock.gif)
254
![](/Images/OutliningIndicators/InBlock.gif)
255
![](/Images/OutliningIndicators/InBlock.gif)
256
![](/Images/OutliningIndicators/InBlock.gif)
257
![](/Images/OutliningIndicators/InBlock.gif)
258
![](/Images/OutliningIndicators/InBlock.gif)
259
![](/Images/OutliningIndicators/InBlock.gif)
260
![](/Images/OutliningIndicators/InBlock.gif)
261
![](/Images/OutliningIndicators/InBlock.gif)
262
![](/Images/OutliningIndicators/InBlock.gif)
263
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
264
![](/Images/OutliningIndicators/InBlock.gif)
265
![](/Images/OutliningIndicators/InBlock.gif)
266
![](/Images/OutliningIndicators/InBlock.gif)
267
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
268
![](/Images/OutliningIndicators/InBlock.gif)
269
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
270
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
271
![](/Images/OutliningIndicators/InBlock.gif)
272
![](/Images/OutliningIndicators/InBlock.gif)
273
![](/Images/OutliningIndicators/InBlock.gif)
274
![](/Images/OutliningIndicators/InBlock.gif)
275
![](/Images/OutliningIndicators/InBlock.gif)
276
![](/Images/OutliningIndicators/InBlock.gif)
277
![](/Images/OutliningIndicators/InBlock.gif)
278
![](/Images/OutliningIndicators/InBlock.gif)
279
![](/Images/OutliningIndicators/InBlock.gif)
280
![](/Images/OutliningIndicators/InBlock.gif)
281
![](/Images/OutliningIndicators/InBlock.gif)
282
![](/Images/OutliningIndicators/InBlock.gif)
283
![](/Images/OutliningIndicators/InBlock.gif)
284
![](/Images/OutliningIndicators/InBlock.gif)
285
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
286
![](/Images/OutliningIndicators/InBlock.gif)
287
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
288
![](/Images/OutliningIndicators/InBlock.gif)
289
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
290
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
291
![](/Images/OutliningIndicators/InBlock.gif)
292
![](/Images/OutliningIndicators/InBlock.gif)
293
![](/Images/OutliningIndicators/InBlock.gif)
294
![](/Images/OutliningIndicators/InBlock.gif)
295
![](/Images/OutliningIndicators/InBlock.gif)
296
![](/Images/OutliningIndicators/InBlock.gif)
297
![](/Images/OutliningIndicators/InBlock.gif)
298
![](/Images/OutliningIndicators/InBlock.gif)
299
![](/Images/OutliningIndicators/InBlock.gif)
300
![](/Images/OutliningIndicators/InBlock.gif)
301
![](/Images/OutliningIndicators/InBlock.gif)
302
![](/Images/OutliningIndicators/InBlock.gif)
303
![](/Images/OutliningIndicators/InBlock.gif)
304
![](/Images/OutliningIndicators/InBlock.gif)
305
![](/Images/OutliningIndicators/InBlock.gif)
306
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
307
![](/Images/OutliningIndicators/InBlock.gif)
308
![](/Images/OutliningIndicators/InBlock.gif)
309
![](/Images/OutliningIndicators/InBlock.gif)
310
![](/Images/OutliningIndicators/InBlock.gif)
311
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
312
![](/Images/OutliningIndicators/InBlock.gif)
313
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
314
![](/Images/OutliningIndicators/InBlock.gif)
315
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
316
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
317
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
318
![](/Images/OutliningIndicators/InBlock.gif)
319
![](/Images/OutliningIndicators/InBlock.gif)
320
![](/Images/OutliningIndicators/InBlock.gif)
321
![](/Images/OutliningIndicators/InBlock.gif)
322
![](/Images/OutliningIndicators/InBlock.gif)
323
![](/Images/OutliningIndicators/InBlock.gif)
324
![](/Images/OutliningIndicators/InBlock.gif)
325
![](/Images/OutliningIndicators/InBlock.gif)
326
![](/Images/OutliningIndicators/InBlock.gif)
327
![](/Images/OutliningIndicators/InBlock.gif)
328
![](/Images/OutliningIndicators/InBlock.gif)
329
![](/Images/OutliningIndicators/InBlock.gif)
330
![](/Images/OutliningIndicators/InBlock.gif)
331
![](/Images/OutliningIndicators/InBlock.gif)
332
![](/Images/OutliningIndicators/InBlock.gif)
333
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
334
![](/Images/OutliningIndicators/InBlock.gif)
335
![](/Images/OutliningIndicators/InBlock.gif)
336
![](/Images/OutliningIndicators/InBlock.gif)
337
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
338
![](/Images/OutliningIndicators/InBlock.gif)
339
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
340
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
341
![](/Images/OutliningIndicators/InBlock.gif)
342
![](/Images/OutliningIndicators/InBlock.gif)
343
![](/Images/OutliningIndicators/InBlock.gif)
344
![](/Images/OutliningIndicators/InBlock.gif)
345
![](/Images/OutliningIndicators/InBlock.gif)
346
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
347
![](/Images/OutliningIndicators/InBlock.gif)
348
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
349
![](/Images/OutliningIndicators/InBlock.gif)
350
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
351
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
352
![](/Images/OutliningIndicators/InBlock.gif)
353
![](/Images/OutliningIndicators/InBlock.gif)
354
![](/Images/OutliningIndicators/InBlock.gif)
355
![](/Images/OutliningIndicators/InBlock.gif)
356
![](/Images/OutliningIndicators/InBlock.gif)
357
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
358
![](/Images/OutliningIndicators/InBlock.gif)
359
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
360
![](/Images/OutliningIndicators/InBlock.gif)
361
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
362
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
363
![](/Images/OutliningIndicators/InBlock.gif)
364
![](/Images/OutliningIndicators/InBlock.gif)
365
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
366
![](/Images/OutliningIndicators/InBlock.gif)
367
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
368
![](/Images/OutliningIndicators/InBlock.gif)
369
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
370
![](/Images/OutliningIndicators/InBlock.gif)
371
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
372
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
373
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
374
![](/Images/OutliningIndicators/InBlock.gif)
375
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
376
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)