arcadiaray

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
WeakRefDictionary 类是一个弱引用字典,在该类中 Microsoft 为我们示范了 .NET 中弱引用的用法,希望大家在看这个类时能够注意到这一点。另外,在 ObjectBuilder 中,默认实现的“定位器”也是使用该类作为“底层存储”,它最主要的特点就是不会阻止 CLR 回收该字典中的对象(只要指向该对象的强引用变量的数量为 0)。

  1using System;
  2using System.Collections.Generic;
  3using Microsoft.Practices.ObjectBuilder.Properties;
  4
  5namespace 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}
posted on 2007-10-27 13:37  幸福延长线  阅读(193)  评论(0编辑  收藏  举报