2011-03-29 87 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,不怎麼樣。