首頁 >後端開發 >C++ >為什麼 C# 陣列不直接實作'IList”,它們看起來又如何?

為什麼 C# 陣列不直接實作'IList”,它們看起來又如何?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-04 17:56:39259瀏覽

Why Don't C# Arrays Directly Implement `IList`, and How Do They Still Seem To?

C# 中的陣列:深入研究介面實作

雖然 C# 中的陣列似乎實作了 IList,但它們不會公開公開 Count 屬性。這看起來似乎與 C# 介面實作規則相矛盾。

實際上,陣列實作 System.Collections.IList,而不是 System.Collections.Generic.IList。像 IList 這樣的通用介面不能由像 Array 這樣的非泛型類型實作。

但是,CLR 會產生可能實作這些介面的特定陣列類型。但即使對於這些特定的陣列類型,轉換為 IEnumerable 也很困難。有效,在檢索介面映射時會拋出異常。

這是由於「quacks-like-a-duck」類型所致,其中編譯器和 CLR 將陣列識別為實作 IList。轉換指令由隱藏的包裝類別 System.SZArrayHelper 處理,該類別提供 IList 的實作。

即使 Count 屬性沒有明確實現,CLR 也提供了一個使用 T[] 數組強制轉換的內部 getter。

這種行為雖然有些不合常規,但允許無縫且高效地實現 IList對於數組。這是一項巧妙的技術,展示了 C# 和 CLR 中的隱藏機制,這些機制有助於其靈活性和強大功能。

以上是為什麼 C# 陣列不直接實作'IList”,它們看起來又如何?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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