首頁 >後端開發 >C++ >如何在 .NET 集合中實現索引存取的協方差?

如何在 .NET 集合中實現索引存取的協方差?

Patricia Arquette
Patricia Arquette原創
2024-12-28 12:51:24174瀏覽

How Can I Achieve Covariance with Index Access in .NET Collections?

在.NET 中利用協方差和索引存取支援

協方差使程式設計師能夠將衍生類別視為其基類,而無需顯式類型轉換。但是,在 .NET 中,協變集合存在缺乏索引存取支援的限制。當嘗試將特定類型的集合(例如,包含 Dog 物件的 List)轉換為其基本類型的集合(例如,Animal)時,會出現此問題。

了解潛在問題

問題源自於 List 實作了 ICollection,其中包含一個 Add 方法。向上轉換為基於動物的 IList 將允許不加區別地添加任何類型的動物,從而違反原始集合的類型限制。

具有索引支援的協變集合

在.NET 4.5 和後來:

  • IReadOnlyList
IReadOnlyCollection

都是協變的。 List ;和 ReadOnlyCollection實作這些接口,提供一個僅獲取索引器,能夠在不違反協方差原則的情況下檢索元素。

  • 對於早期.NET 版本:
  • 協方差早期.NET 不提供索引支援

自定義包裝方法: 一種解決方案是將原始集合包裝在僅公開IEnumerable和取得索引器介面的自訂類別中。此方法在維護索引存取功能的同時確保協方差。

實作:

以下C# 程式碼示範了使用協方差擴充方法的自訂包裝器方法:此擴充方法可讓您建立具有索引支援的協變集合,如下所示例如:

以上是如何在 .NET 集合中實現索引存取的協方差?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn