2011-03-29 45 views
1

我想知道,为什么在某些场合我看到代表某种类型集合的类。使用类型安全的集合类有什么好处?

例如:

在Microsoft XNA框架:TextureCollection,TouchCollection等 另外其他类在.NET框架本身,以收集结束。

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

感谢

回答

3

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

TextureCollection有意削弱,它可以确保你永远不能建立它的一个实例。只有约纹理秘密知识可以填补这个集合,列表<>是不够的,因为它无法与秘密知识,使索引工作进行初始化。类也不需要是通用的,它只知道Texture类实例。

的TouchCollection同样专业。 Add()方法抛出NotSupportedException。这不能通过常规List类来完成,它的Add()方法不是虚拟的,所以不能被覆盖以抛出异常。

这并不罕见。

+0

你的秘密知识是什么意思? – 2011-03-30 20:09:02

+0

内部的变量。 – 2011-03-30 22:54:31

1

这不是那么容易的XAML使用泛型类为例。

3

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

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

+0

XNA使用泛型,OP的TouchCollection示例实现了'IList '。 – 2011-03-29 23:30:45

2

它允许你定义你自己的集合语义(你可能不想有一个AddAddRange方法等)。

此外,由于您的代码遍布各地的List<Touch>List<Texture>,因此可读性得到提高。

也有相当多的.NET 1.0/1.1的代码,仍然需要工作,所以要早泛型旧藏品仍然有存在的必要。

1

从Oded的答案中可以看出,当你决定你想要一个堆栈/队列等而不是那个List时,你自己的类类型允许更容易地改变轨道。可能有很多原因,包括性能,内存使用等

事实上,它通常是一个好主意,隐藏式的实施细节 - 类的用户只是想知道,它存储Textures,不怎么样。

相关问题