[英]What is the benefit of using type-safe collection classes?
我想知道為什么在某些情況下會看到代表某種類型集合的類。
例如:
在Microsoft XNA Framework中:TextureCollection,TouchCollection等。還有.NET Framework本身中的其他類,以Collection結尾。
為什么這樣設計? 以這種方式而不是像C#2.0中引入的那樣作為通用類型集合,這樣做有什么好處?
謝謝
在.NET框架本身中,許多類型安全的集合早於2.0泛型,並且為了兼容性而保留。
對於幾個與XAML相關的上下文,要么沒有語法來指定泛型類,要么語法繁瑣。 因此,當使用List<T>
,將為每個需求編寫一個特定的TList
。
您提供的示例很好。 TextureCollection是密封的,沒有公共構造函數,只有一個內部構造函數。 TouchCollection實現IList<TouchLocation>
,類似於List<T>
實現IList<T>
。 順便說一句,泛型在這里工作,建議的答案是不正確的。
TextureCollection是有意殘廢的,它確保您永遠無法創建它的實例。 只有有關紋理的秘密知識才能填充此集合,因為List <>不能用使索引器工作的秘密知識進行初始化,所以就不夠了。 該類也不需要通用,它只知道Texture類實例。
TouchCollection同樣是專門的。 Add()方法將引發NotSupportedException。 這不能通過常規的List <>類完成,它的Add()方法不是虛擬的,因此不能被覆蓋以引發異常。
這並不罕見。
它允許您在集合上定義自己的語義(您可能不希望擁有Add
或AddRange
方法等)。
此外,通過不隨處亂碼List<Touch>
和List<Texture>
來提高可讀性。
還有很多.NET 1.0 / 1.1代碼仍需要工作,因此,早於泛型的舊集合仍然需要存在。
例如,在XAML中使用通用類並不是那么容易。
在Oded的回答之后,當您決定要堆棧/隊列等而不是List
時,您自己的類類型可以輕松地進行更改。 可能有很多原因,包括性能,內存使用等。
實際上,隱藏這種類型的實現細節通常是一個好主意-類的用戶只想知道它存儲Textures
,而不是方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.