首頁 > 後端開發 > C++ > C# 陣列如何在沒有明確計數屬性的情況下實作 IList?

C# 陣列如何在沒有明確計數屬性的情況下實作 IList?

Susan Sarandon
發布: 2025-01-05 09:30:39
原創
387 人瀏覽過

How Do C# Arrays Seemingly Implement IList Without an Explicit Count Property?

儘管缺少Count 屬性,數組如何部分實現IList

在C# 中,數組實現了IList,但它們缺少介面中明確聲明的Count 屬性。這引發了人們的疑問:這種行為是違反介面實作規則還是只是一種誤解。

深入框架

雖然數組沒有實現 IList ;他們直接實現了非通用 IList。此外,CLR動態地產生專門的陣列類型,這在理論上可以實現通用的IList T 。介面.然而,直接的實現並不存在。

CLR 的嘎嘎鴨方法

CLR 為數組實現了特殊技術,類似於用於值的技術類型。編譯器辨識對 IList 的強制轉換。並指示 CLR 透過底層數組物件來實現它。然後,CLR 將執行委託給隱藏的 System.SZArrayHelper 類別,該類別實作了必要的介面。

Count 屬性實作

儘管沒有明確聲明,但 Count 屬性可以被存取。然而,它的實現如下:

internal int get_Count<T>() {
    // Warning: "this" is an array, not an SZArrayHelper
    T[] _this = JitHelpers.UnsafeCast<T[]>(this);
    return _this.Length;
}
登入後複製

正如評論所暗示的,這種行為可能被認為是違反規則的,但它有助於高效的數組處理。

結論

陣列部分實現了 IList;透過 CLR 的鴨子式方法。雖然 Count 屬性沒有明確定義,但它是由 CLR 在內部實現的,允許數組和泛型集合之間的無縫整合。

以上是C# 陣列如何在沒有明確計數屬性的情況下實作 IList?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板