Izinkan saya memberi contoh:
Saya memiliki beberapa definisi kelas / antarmuka generik:
interface IGenericCar< T > {...}
Saya memiliki kelas / antarmuka lain yang ingin saya kaitkan dengan kelas di atas, misalnya:
interface IGarrage< TCar > : where TCar: IGenericCar< (**any type here**) > {...}
Pada dasarnya, saya ingin IGarrage generik saya bergantung IGenericCar
, terlepas dari apakah itu IGenericCar<int>
atau IGenericCar<System.Color>
, karena saya tidak memiliki ketergantungan pada tipe itu.
c#
generics
where
type-constraints
Nenad
sumber
sumber
T
di dalamIGarage<TCar>
? Saya tidak bisa melihat kemungkinan di option2. Solusi terbaik adalah jikaIGarage<TCar>
menemukan tipeT
dengan menganalisis tipeTCar
.IGarage<IGenericCar<?>>.TellMeAboutCarsInGeneral()
, yang mungkin akan menjadi hasil dari desain yang buruk), tetapi saya telah melakukannya dalam mengutak-atik saya, dan itu adalah mungkin.IGarrage<TCar>
benar-benar menangani tipe generik yang mendasarinya (misalnya menangani properti dari tipe tersebut), maka ia perlu mengetahui tipenya, yang mengharuskan Anda menentukan tipe, yaitu opsi 1 (saat itu satu-satunya opsi yang layak). Namun, jikaIGarrage<TCar>
tidak secara langsung menangani tipe generik yang mendasari (semuaIGarrage<TCar>
kode agnostik dari tipe yang mendasari ini), maka opsi 2 valid.Apakah masuk akal untuk melakukan sesuatu seperti:
sumber