Memahami Kekangan Generik dalam Casting
Generik menyediakan mekanisme yang berkuasa untuk pengaturcaraan selamat jenis dalam C#. Walau bagaimanapun, terdapat had tertentu yang berkaitan dengan pemutus apabila ia berkaitan dengan kelas yang diwarisi dan kelas asas.
Pertimbangkan contoh berikut:
public abstract class EntityBase { } public class MyEntity : EntityBase { } public abstract class RepositoryBase<T> where T : EntityBase { } public class MyEntityRepository : RepositoryBase<MyEntity> { }
Dalam senario ini, cuba menghantar MyEntityRepository ke RepositoryBase
Penjelasan:
MyEntityRepository bukan kelas asas RepositoryBase
Impak Varian Generik:
Varians generik merujuk kepada keupayaan jenis generik untuk merawat hubungan subjenis dan superjenis. Dalam C#, kovarians generik dan kontravarians disokong pada tahap yang terhad. Walau bagaimanapun, dalam kes ini, kovarians tidak boleh digunakan kerana kelas asas bukan subjenis kelas terbitan.
Penyelesaian Kemungkinan:
Malangnya, tiada langsung cara untuk menghantar MyEntityRepository ke RepositoryBase
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Hantar `RepositoryBase` ke `RepositoryBase` dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!