收藏和应用广泛使用?

时间:2009-12-18 17:27:19

标签: c# design-patterns collections

这是我在创建需要在整个应用程序范围内可用的对象(例如集合)时遇到的一个特定问题。

我有以下课程:

 class UserDataCollection
    {
        List<UserData> Collection = new List<UserData>();
        UserData current;

        public UserData Current
        {
            get { return current; }
            set 
            {
                current = value;
            }
        }

        public UserDataCollection( UserData userdata )
        {
            this.current = userdata;
        }

        public void Add ( UserData item )
        {
            Collection.Add(item);
        }


    }

现在,对于我想要添加的每个UserData对象,每次我去UserDataCollection datacoll = new UserDataCollection(userdata);

时都会创建一个新的List对象

所以我的对象永远不会被添加到同一个集合中,这不是这个集合的重点。

这是一个很好的单例案例还是仅仅在Application Init中创建对象并在整个过程中使用相同的对象?

对于这样的事情,最好的设计实践是什么?

5 个答案:

答案 0 :(得分:1)

您可以将列表设为静态。然后只会有一个集合。

答案 1 :(得分:1)

取决于

如果它是一个Web应用程序,您可以在应用程序启动时创建您的集合并将其存储到HttpContext的Application属性中。如果没有,您可以使用单例或IoC容器并将其配置为始终返回对象的同一实例。

P.S:如果应用程序的多个线程同时运行,请确保在更新集合之前使用锁。

希望它会有所帮助。

答案 2 :(得分:0)

这样的集合显然是针对多个对象的,所以你可以在创建...对象集合的地方实例化它们......如果你想使用ctor,那么它应该采用它的参数a ...这些对象的集合或可枚举集......

 // Inheriting from List<UserData> eliminates need for most of your code
 class UserDataCollection: List<UserData>
 {        
      public UserDataCollection(IEnumerable<UserData> users)
      {
          foreach (UserData usr in users)
              Add(usr);
      }  
 }

答案 3 :(得分:0)

如果每个应用程序只有一个UserDataCollection,那么我不明白为什么不将它作为单例。

答案 4 :(得分:0)

我喜欢这里的Singleton的想法,如果你只想要一个整个应用程序。如果你在ASP.NET应用程序中使用它,你将需要注意单例,因为static变量就像在应用程序状态中保存数据...这可能是你想要的......但不容易注意到对外界(可维护性问题)。