Rumah >pembangunan bahagian belakang >C++ >Mengapa kovarians dan pelanggaran bekerja dengan jenis nilai dalam C#?

Mengapa kovarians dan pelanggaran bekerja dengan jenis nilai dalam C#?

Susan Sarandon
Susan Sarandonasal
2025-01-30 21:16:10162semak imbas

Why Don't Covariance and Contravariance Work with Value Types in C#?

c# kovarians dan pelanggaran: sekatan jenis nilai

Covariance dan Ciri -ciri Pelanggaran membolehkan tugasan jenis yang fleksibel. Walau bagaimanapun, keupayaan ini terhad apabila bekerja dengan jenis nilai.

mempamerkan kovarians, membenarkan tugasan IEnumerable<T> rujukan kepada rujukan objek. Ini tidak meluas kepada jenis nilai, seperti yang digambarkan: T

<code class="language-csharp">IEnumerable<string> strList = new List<string>();
IEnumerable<object> objList = strList;  // Compiles fine

IEnumerable<int> intList = new List<int>();
IEnumerable<object> objList = intList;  // Compilation error</code>
Perbezaan ini berpunca daripada tinju. Menetapkan jenis nilai kepada pemboleh ubah rujukan memerlukan tinju-mewujudkan objek yang diperuntukkan timbunan baru. Ini menambah overhead dan memperkenalkan isu runtime yang berpotensi.

Dengan kovarians, runtime bahasa biasa (CLR) tidak dapat menjamin pemeliharaan identiti nilai berkotak. Sebagai contoh, kaedah yang menerima

dan mengubah suai elemen tidak menjamin nilai kotak object[] tetap tidak berubah. IEnumerable<int>

Oleh itu, untuk mengekalkan keselamatan jenis dan mencegah kesilapan yang berkaitan dengan tinju, kovarians dan pelanggaran tidak disokong untuk jenis nilai dalam C#.

Atas ialah kandungan terperinci Mengapa kovarians dan pelanggaran bekerja dengan jenis nilai dalam C#?. 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