在命名空间System.Collections里面,一些常用的集合类,如,ArrayList、Stack、Queue等,都具有一个名为Synchronized()的公共静态方法。该方法能够为用户提供一个返回同步(线程安全)的列表包装。请问如何在CollectionBase的派生类里面实现作用相同的公共静态方法Synchronized() 。

解决方案 »

  1.   

    一般是建立一个Sync类,用Reflector看一下ArrayList是怎么实现的http://www.aisto.com/roeder/dotnet/
      

  2.   

    怎么找不到ArrayList?加我啊:496711172
      

  3.   

    1、继承你定义的集合类,比如class SyncXxxCollection : XxxCollection
    2、添加一个构造函数,接受参数类型为XxxCollection:
    public SyncXxxCollection(XxxCollection list)
    {
          this.List = list;
    }
    3、重写所有方法,比如:
    public override int Add(object value)
    {
          lock((base as ICollection).SyncRoot)
          {
                return this.List.Add(value);
          }
    }
    4、重写IsSynchronized属性返回true
    5、在XxxCollection中添加静态Synchronized方法:
    public static XxxCollection Synchronized(XxxCollection list)
    {
          if (list == null)
          {
                throw new ArgumentNullException("list");
          }
          return new SyncXxxCollection(list);
    }