Rumah >pembangunan bahagian belakang >C++ >Mengapa kovarians dan pelanggaran bekerja dengan jenis nilai dalam 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>
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!