我想知道,爲什麼在某些場合我看到代表某種類型集合的類。使用類型安全的集合類有什麼好處?
例如:
在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