Rumah >pembangunan bahagian belakang >C++ >Mengapa kovarians tidak berfungsi dengan jenis nilai dalam C#?

Mengapa kovarians tidak berfungsi dengan jenis nilai dalam C#?

Linda Hamilton
Linda Hamiltonasal
2025-01-30 21:11:10886semak imbas

Why Doesn't Covariance Work with Value Types in C#?

c# kovarians dan pelanggaran: sekatan jenis nilai

antara muka

dalam C# mempamerkan kovarians, yang membolehkan tugasan rujukan jenis yang diperolehi kepada rujukan jenis asas. Walau bagaimanapun, ini tidak terpakai kepada jenis nilai. Menugaskan IEnumerable<T> ke IEnumerable<int> menghasilkan ralat kompilasi. IEnumerable<object>

Batasan ini berpunca dari tinju dan unboxing. Tinju menukarkan jenis nilai ke dalam jenis rujukan (

), sementara unboxing membalikkan ini. Parameter Jenis object IEnumerable<T> hanya berfungsi dengan jenis rujukan. Menetapkan T jenis nilai kepada IEnumerable memerlukan tinju, yang tidak disokong secara tersirat untuk jenis nilai. IEnumerable<object>

kovarians dan pelanggaran bergantung kepada perwakilan nilai yang konsisten merentasi penukaran. Walau bagaimanapun, jenis nilai tidak mengekalkan konsistensi ini. Tinju mengubah perwakilan mereka, yang berpotensi membawa kepada kehilangan identiti dan ketidakstabilan, melanggar prinsip -prinsip kovarian dan tugas yang bertentangan.

tulisan Eric Lippert mengenai perwakilan dan identiti menyerlahkan bahawa penukaran ini menuntut pemeliharaan identiti. Kerana jenis nilai 'Proses tinju memecahkan pemeliharaan ini, mereka tidak serasi dengan kovarians dan pelanggaran.

Atas ialah kandungan terperinci Mengapa kovarians tidak berfungsi 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