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
Lepaskan: 2025-01-30 21:16:10
asal
161 orang telah melayarinya

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

IEnumerable<string> strList = new List<string>();
IEnumerable<object> objList = strList;  // Compiles fine

IEnumerable<int> intList = new List<int>();
IEnumerable<object> objList = intList;  // Compilation error
Salin selepas log masuk
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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan