簡體   English   中英

使用類型安全的收集類有什么好處?

[英]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()方法不是虛擬的,因此不能被覆蓋以引發異常。

這並不罕見。

它允許您在集合上定義自己的語義(您可能不希望擁有AddAddRange方法等)。

此外,通過不隨處亂碼List<Touch>List<Texture>來提高可讀性。

還有很多.NET 1.0 / 1.1代碼仍需要工作,因此,早於泛型的舊集合仍然需要存在。

例如,在XAML中使用通用類並不是那么容易。

在Oded的回答之后,當您決定要堆棧/隊列等而不是List時,您自己的類類型可以輕松地進行更改。 可能有很多原因,包括性能,內存使用等。

實際上,隱藏這種類型的實現細節通常是一個好主意-類的用戶只想知道它存儲Textures ,而不是方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM