首頁 >後端開發 >C++ >儘管缺少公共「Count」屬性,C# 陣列是否真正實作了「IList」介面?

儘管缺少公共「Count」屬性,C# 陣列是否真正實作了「IList」介面?

Susan Sarandon
Susan Sarandon原創
2025-01-05 20:14:41713瀏覽

Do C# Arrays Truly Implement the `IList` Interface Despite Lacking a Public `Count` Property?

C# 中的陣列:破壞 IList介面實作?

問題:

C# 中的陣列實作 IList但神秘地缺乏公共伯爵財產。這是否違反了介面實作規則?

答案:

陣列與泛型介面

C# 中的陣列實作System.Collections.IList,它不是通用的。它們不會直接實作 System.Collections.Generic.IList 。因為它們不是通用的。

CLR 中的隱藏實作

但是,公共語言執行階段 (CLR) 動態建立特定的陣列類型。這些類型在內部使用 System.SZArrayHelper 類別來實作 IList 。接口。

編譯器和 CLR 知識

編譯器和 CLR 知道陣列類型並了解如何將它們轉換為 IList。 CLR 提供了透過 SZArrayHelper 類別存取底層陣列物件的實作。

缺少 Count 屬性

Count 屬性未明確實作。相反,CLR 在內部使用對應到陣列 Length 屬性的方法:

internal int get_Count<T>() {
    T[] _this = JitHelpers.UnsafeCast<T[]>(this);
    return _this.Length;
}

違反規則?

這種內部實作可以說違反了嚴格的規則介面實作規則。然而,它為數組提供了一種方便且無縫的方式,使其表現得像實現了 IList 一樣。

其他見解

  • CLR 還有其他類型替換,例如 MapIList 。至IVector T在 WinRT 上下文中。
  • 將陣列視為完全實作 IList 的抽像很方便,但在某些情況下可能會產生誤導。
  • GetInterfaceMap() 方法不適用於泛型介面的特定陣列類型,從而揭示了隱藏的實作。

以上是儘管缺少公共「Count」屬性,C# 陣列是否真正實作了「IList」介面?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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