Podam przykład:
Mam ogólną definicję klasy / interfejsu:
interface IGenericCar< T > {...}
Mam inną klasę / interfejs, który chcę powiązać z klasą powyżej, na przykład:
interface IGarrage< TCar > : where TCar: IGenericCar< (**any type here**) > {...}
Zasadniczo chcę, aby mój ogólny IGarrage był zależny IGenericCar
, niezależnie od tego, czy jest, IGenericCar<int>
czy IGenericCar<System.Color>
, ponieważ nie mam żadnej zależności od tego typu.
c#
generics
where
type-constraints
Nenad
źródło
źródło
T
wIGarage<TCar>
? Nie widzę żadnej możliwości w opcji 2. Najlepszym rozwiązaniem byłobyIGarage<TCar>
znalezienie typuT
poprzez analizę typuTCar
.IGarage<IGenericCar<?>>.TellMeAboutCarsInGeneral()
, Co prawdopodobnie byłoby wynikiem złego projektu), ale zrobiłem to podczas majsterkowania i jest możliwe.IGarrage<TCar>
faktycznie obsługuje podstawowy typ ogólny (np. obsługuje właściwość wspomnianego typu), to musi znać typ, co wymaga określenia typu, czyli opcji 1 (wówczas jedyna możliwa opcja). Jeśli jednakIGarrage<TCar>
nie obsługuje bezpośrednio podstawowego typu ogólnego (całyIGarrage<TCar>
kod jest agnostyczny dla tego typu podstawowego), wówczas opcja 2 jest prawidłowa.Czy miałoby sens zrobienie czegoś takiego:
źródło