Rumah >pembangunan bahagian belakang >C++ >Adakah C# Arrays Benar-benar Melaksanakan Antara Muka `IList` Walaupun Tiada Harta `Count` Awam?

Adakah C# Arrays Benar-benar Melaksanakan Antara Muka `IList` Walaupun Tiada Harta `Count` Awam?

Susan Sarandon
Susan Sarandonasal
2025-01-05 20:14:41660semak imbas

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

Array dalam C#: Memecahkan IList Implementasi Antara Muka?

Soalan:

Array dalam C# melaksanakan IList tetapi secara misteri tidak mempunyai harta Count awam. Adakah ini melanggar peraturan pelaksanaan antara muka?

Jawapan:

Array dan Antara Muka Generik

Array dalam C# implement System.Collections.IList, yang bukan generik. Mereka tidak langsung melaksanakan System.Collections.Generic.IList kerana ia bukan generik.

Pelaksanaan Tersembunyi dalam CLR

Walau bagaimanapun, Common Language Runtime (CLR) mencipta jenis tatasusunan konkrit secara dinamik. Jenis ini secara dalaman menggunakan kelas System.SZArrayHelper untuk melaksanakan IList antara muka.

Pengetahuan Pengkompil dan CLR

Pengkompil dan CLR mengetahui jenis tatasusunan dan memahami cara menghantarnya ke IList. CLR menyediakan pelaksanaan yang mengakses objek tatasusunan yang mendasari melalui kelas SZArrayHelper.

Harta Kiraan Hilang

Harta Kiraan tidak dilaksanakan secara eksplisit. Sebaliknya, CLR secara dalaman menggunakan kaedah yang memetakan kepada sifat Length tatasusunan:

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

Melanggar Peraturan?

Pelaksanaan dalaman ini boleh dikatakan melanggar peraturan yang ketat. peraturan pelaksanaan antara muka. Walau bagaimanapun, ia menyediakan cara yang mudah dan lancar untuk tatasusunan berkelakuan seolah-olah mereka melaksanakan IList sepenuhnya.

Wawasan Tambahan

  • CLR mempunyai penggantian jenis lain, seperti映射IList kepada IVector dalam konteks WinRT.
  • Pengabstraksian merawat tatasusunan seolah-olah mereka melaksanakan sepenuhnya IList adalah mudah tetapi mungkin mengelirukan dalam sesetengah kes.
  • Kaedah GetInterfaceMap() tidak berfungsi dengan jenis tatasusunan konkrit untuk antara muka generik, mendedahkan pelaksanaan tersembunyi.

Atas ialah kandungan terperinci Adakah C# Arrays Benar-benar Melaksanakan Antara Muka `IList` Walaupun Tiada Harta `Count` Awam?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn