在.NET 中利用協方差和索引存取支援
協方差使程式設計師能夠將衍生類別視為其基類,而無需顯式類型轉換。但是,在 .NET 中,協變集合存在缺乏索引存取支援的限制。當嘗試將特定類型的集合(例如,包含 Dog 物件的 List)轉換為其基本類型的集合(例如,Animal)時,會出現此問題。
了解潛在問題
問題源自於 List 實作了 ICollection,其中包含一個 Add 方法。向上轉換為基於動物的 IList 將允許不加區別地添加任何類型的動物,從而違反原始集合的類型限制。
具有索引支援的協變集合
在.NET 4.5 和後來:
都是協變的。 List
自定義包裝方法: 一種解決方案是將原始集合包裝在僅公開IEnumerable和取得索引器介面的自訂類別中。此方法在維護索引存取功能的同時確保協方差。
實作:以下C# 程式碼示範了使用協方差擴充方法的自訂包裝器方法:此擴充方法可讓您建立具有索引支援的協變集合,如下所示例如:以上是如何在 .NET 集合中實現索引存取的協方差?的詳細內容。更多資訊請關注PHP中文網其他相關文章!