C#Generik -Jenis Nilai Medium Jenis Tidak Puas hati
Varians dalam generik membolehkan jenis mewarisi kerjasama atau membalikkan parameternya. Walau bagaimanapun, mekanisme ini tidak berkenaan untuk jenis nilai. Untuk memahami had ini, kita perlu mengkaji konsep pembungkusan dan kesannya terhadap keselamatan jenis.
Deklarasiadalah perubahan. Penyelarasan membolehkan jenis yang diperoleh untuk menggantikan jenis asas, seperti
dan. Walau bagaimanapun, jenis nilai tidak berlaku. Pertimbangkan kod berikut:
IEnumerable<T>
IEnumerable<string>
Kod ini boleh menyebabkan kesilapan kompilasi kerana jenis nilai dianggap tidak berubah. Varians hanya sesuai untuk jenis rujukan. Alasannya ialah kerumitan kotak. IEnumerable<object>
<code class="language-csharp">IEnumerable<int> intList = new List<int>(); IEnumerable<object> objList = intList;</code>
dibuat di sekitar
. Ini membolehkan jenis nilai dianggap sebagai jenis rujukan dalam beberapa kes.
int
object
Sebagai contoh, mungkin termasuk objek dengan borang yang menunjukkan int
yang berbeza. Apabila objek -objek ini dikunjungi, mereka mesti dilepaskan ke nilai object
asal apabila runtime. Jika borang tidak konsisten, pembatalan kotak boleh menyebabkan ralat jenis nilai atau kerosakan data.
Untuk mengekalkan keselamatan jenis, CLR mengehadkan varians kepada jenis rujukan. Ini dapat memastikan bahawa borang itu konsisten dan penukaran antara jenis yang berbeza tidak akan menyebabkan integriti data.
Atas ialah kandungan terperinci Mengapa jenis nilai invarian dalam C# Generik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!