Type Casting Conundrum with Generics Inheritance
Generik menawarkan keupayaan berkuasa dalam pengaturcaraan berorientasikan objek, tetapi ia juga memperkenalkan kerumitan seperti isu dalam pemutus antara kelas yang diwarisi dan asas. Mari kita selidiki sebab mengapa percubaan menghantar seperti berikut mungkin gagal:
MyEntityRepository myEntityRepo = GetMyEntityRepo(); // Initialization of the repository RepositoryBase<EntityBase> baseRepo = (RepositoryBase<EntityBase>)myEntityRepo;
Dalam kod ini, kami cuba menghantar contoh kelas terbitan (MyEntityRepository) kepada jenis generik kelas asas (RepositoryBase
Dalam senario yang disediakan, MyEntityRepository ialah versi khusus RepositoryBase
Apabila anda menghantar MyEntityRepository sebagai RepositoryBase
Akibatnya, apabila penghantaran dicuba, sistem masa jalan mengesan ketidakpadanan ini antara yang dijangkakan keupayaan RepositoryBase
Untuk menyelesaikan isu ini, adalah penting untuk mempertimbangkan tujuan dan penggunaan kelas generik. Dalam kes ini, MyEntityRepository hanya seharusnya beroperasi pada objek MyEntity, jadi adalah tidak wajar untuk mencuba penghantaran ke RepositoryBase
Jika anda memerlukan repositori yang boleh beroperasi pada kelas asas entiti yang lebih luas seperti EntityBase, anda harus membuat kelas repositori generik baharu untuk mengendalikan keperluan khusus itu. Ini akan memastikan keselamatan jenis dan andaian tentang kefungsian repositori dikekalkan.
Atas ialah kandungan terperinci Mengapa Menghantar Jenis Generik Terbitan kepada Jenis Generik Asasnya Gagal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!