我想知道,为什么在某些场合我看到代表某种类型集合的类。使用类型安全的集合类有什么好处?
例如:
在Microsoft XNA框架:TextureCollection,TouchCollection等 另外其他类在.NET框架本身,以收集结束。
为什么这样设计?这样做的好处是什么,而不是像C#2.0中引入的泛型类型集合?
感谢
我想知道,为什么在某些场合我看到代表某种类型集合的类。使用类型安全的集合类有什么好处?
例如:
在Microsoft XNA框架:TextureCollection,TouchCollection等 另外其他类在.NET框架本身,以收集结束。
为什么这样设计?这样做的好处是什么,而不是像C#2.0中引入的泛型类型集合?
感谢
你给的例子是好的。 TextureCollection是密封的,没有公共的构造函数,只有内部的构造函数。 TouchCollection实现了IList<TouchLocation>
,类似于List<T>
实现IList<T>
。泛型在这里工作顺便说一句,upvoted的答案是不正确的。
TextureCollection有意削弱,它可以确保你永远不能建立它的一个实例。只有约纹理秘密知识可以填补这个集合,列表<>是不够的,因为它无法与秘密知识,使索引工作进行初始化。类也不需要是通用的,它只知道Texture类实例。
的TouchCollection同样专业。 Add()方法抛出NotSupportedException。这不能通过常规List类来完成,它的Add()方法不是虚拟的,所以不能被覆盖以抛出异常。
这并不罕见。
这不是那么容易的XAML使用泛型类为例。
在.NET框架本身,多类型安全的集合早于2.0泛型,并保持兼容性。
几XAML相关的上下文中,有或者没有语法来指定一个泛型类,或语法很麻烦。因此,当使用List<T>
时,会针对每个需求编写一个特定的TList
。
XNA使用泛型,OP的TouchCollection示例实现了'IList
它允许你定义你自己的集合语义(你可能不想有一个Add
或AddRange
方法等)。
此外,由于您的代码遍布各地的List<Touch>
和List<Texture>
,因此可读性得到提高。
也有相当多的.NET 1.0/1.1的代码,仍然需要工作,所以要早泛型旧藏品仍然有存在的必要。
从Oded的答案中可以看出,当你决定你想要一个堆栈/队列等而不是那个List
时,你自己的类类型允许更容易地改变轨道。可能有很多原因,包括性能,内存使用等
事实上,它通常是一个好主意,隐藏式的实施细节 - 类的用户只是想知道,它存储Textures
,不怎么样。
你的秘密知识是什么意思? – 2011-03-30 20:09:02
内部的变量。 – 2011-03-30 22:54:31