Pemahaman mendalam tentang kovarians generik dan kontravarians dalam C# 4.0
Dalam versi C# yang lebih awal, jenis generik tidak menyokong kovarians atau kontravarians, yang akan membawa had apabila berurusan dengan koleksi objek dengan hubungan ibu bapa-anak. Walau bagaimanapun, C# 4.0 memperkenalkan sokongan untuk konsep ini di bawah kekangan tertentu.
Kovarian dalam antara muka
Kovarian membenarkan jenis generik menerima jenis terbitan sebagai parameter. Untuk antara muka, nyatakan menggunakan kata kunci "keluar". Sebagai contoh, jika kita mempunyai antara muka IEnumerable<out T>
, ini bermakna antara muka hanya membenarkan mendapatkan semula nilai jenis T. Ini membolehkan kami mengembalikan IEnumerable<object>
daripada kaedah yang diisytiharkan untuk mengembalikan IEnumerable<string>
.
Percanggahan dalam perwakilan
Kontravarian membolehkan jenis generik menerima jenis asas sebagai parameter. Untuk perwakilan, gunakan kata kunci "dalam". Pertimbangkan Action<in T>
delegasi. Ini mewakili kaedah yang menerima parameter jenis T. Kini boleh digunakan Action<object>
sebagai Action<string>
kerana kaedah menjangkakan objek masih akan berfungsi dengan betul apabila menghantar rentetan.
Butiran pelaksanaan
Sokongan varians dalam C# 4.0 dilaksanakan melalui ciri runtime bahasa biasa (CLR). Pengkompil mengesahkan bahawa anotasi varians pada antara muka dan perwakilan digunakan dengan betul. Khususnya, antara muka hanya boleh menggunakan "keluar" untuk parameter output sahaja (pengambil), manakala perwakilan mesti menggunakan "masuk" untuk parameter input sahaja (penetap).
Pastikan keselamatan jenis
Walaupun C# 4.0 menyokong varians, ia melakukannya dengan cara yang selamat jenis. Pengkompil memastikan bahawa sebarang kod yang cuba melanggar kekangan jenis akan ditolak. Ini menghalang situasi di mana senarai pisang dipaksa menjadi senarai buah, yang tidak mempunyai kesan.
Ringkasan
Kovarians generik dan kontravarian dalam C# 4.0 memberikan fleksibiliti yang lebih besar dan kebolehgunaan semula kod sambil mengekalkan keselamatan jenis. Ia membolehkan pembangun menggunakan antara muka dan perwakilan dengan lancar yang mewakili perhubungan jenis ibu bapa-anak.
Atas ialah kandungan terperinci Bagaimanakah C# 4.0 Mengendalikan Kovarians dan Kontravarians Generik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!