使用类型安全的集合类有什么好处?

时间:2011-03-29 21:27:54

标签: c# collections type-safety

我在想,为什么在某些情况下我会看到一个代表某种类型集合的类。

例如:

在Microsoft XNA Framework中:TextureCollection,TouchCollection等。 .NET框架本身的其他类,以Collection。结尾。

为什么这样设计?这样做有什么好处而不是像C#2.0中引入的泛型类型集合?

由于

5 个答案:

答案 0 :(得分:3)

在.NET框架本身中,许多类型安全的集合早于2.0泛型,并且保持兼容性。

对于几个与XAML相关的上下文,没有语法来指定泛型类,或者语法很麻烦。因此,当List<T>被使用时,会针对每个需求编写一个特定的TList

答案 1 :(得分:3)

你给出的例子很好。 TextureCollection是密封的,没有公共构造函数,只有内部构造函数。 TouchCollection实现IList<TouchLocation>,类似于List<T>实现IList<T>的方式。仿制药在这里工作,顺便说一句,这个答案是不正确的。

TextureCollection被故意削弱,它确保你永远不能创建它的实例。只有关于纹理的秘密知识才能填充此集合,List&lt;&gt;这是不够的,因为它不能用使索引器工作的秘密知识初始化。类也不需要是通用的,它只知道Texture类实例。

TouchCollection同样专业。 Add()方法抛出NotSupportedException。这不能通过常规List&lt;&gt;来完成。 class,它的Add()方法不是虚拟的,所以不能重写抛出异常。

这并不罕见。

答案 2 :(得分:2)

它允许您在集合上定义自己的语义(您可能不希望使用AddAddRange方法等...)。

此外,由于没有让您的代码遍布各处List<Touch>List<Texture>,因此可读性会提高。

还有相当多的.NET 1.0 / 1.1代码仍然需要工作,因此仍然需要存在早于仿制药的旧集合。

答案 3 :(得分:1)

例如,在XAML中使用泛型类并不容易。

答案 4 :(得分:1)

根据Oded的回答,当您决定需要堆栈/队列等而不是List时,您自己的类类型允许更容易地改变轨道。这可能有很多原因,包括性能,内存使用等。

事实上,隐藏这种类型的实现细节通常是个好主意 - 您的班级用户只想知道它存储Textures,而不是如何存储。