C# 使用类型安全集合类的好处是什么?

C# 使用类型安全集合类的好处是什么?,c#,collections,type-safety,C#,Collections,Type Safety,我想知道,为什么有时我会看到一个类代表某个类型的集合 例如: 在Microsoft XNA框架中:TextureCollection、TouchCollection等。 还有.NET framework本身中的其他类,以Collection结尾 为什么它是这样设计的?这样做的好处是什么,而不是像C#2.0中引入的那样作为泛型类型集合 例如,在XAML中使用泛型类并不是那么容易。在.NET framework本身中,许多类型安全集合早于2.0泛型,并且为了兼容性而保留 对于几个与XAML相关的上下

我想知道,为什么有时我会看到一个类代表某个类型的集合

例如:

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

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


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

在.NET framework本身中,许多类型安全集合早于2.0泛型,并且为了兼容性而保留


对于几个与XAML相关的上下文,要么没有语法来指定泛型类,要么语法很麻烦。因此,当使用
List
时,会为每个需要编写一个特定的
TList

它允许您在集合上定义自己的语义(您可能不希望使用
添加
添加范围
方法等)

此外,通过不让代码到处乱放
List
List
可以提高可读性


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

根据Oded的答案,当您决定使用堆栈/队列等而不是
列表时,您自己的类类型允许更轻松地更改路径。这可能有很多原因,包括性能、内存使用等


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

您给出的示例很好。TextureCollection是密封的,没有公共构造函数,只有一个内部构造函数。TouchCollection实现了
IList
,类似于
List
实现
IList
的方式。泛型在这里起作用顺便说一句,投票结果是不正确的

TextureCollection是故意禁用的,它确保您永远无法创建它的实例。只有关于纹理的秘密知识才能填充这个集合,列表是不够的,因为它不能用使索引器工作的秘密知识初始化。类也不需要是泛型的,它只知道纹理类实例

TouchCollection也是专门化的。Add()方法引发NotSupportedException。这不能用常规列表类来完成,因为它的Add()方法不是虚拟的,因此无法重写以引发异常


这并不罕见。

XNA使用泛型,OP的TouchCollection示例实现了
IList
。什么是秘密知识?