Permettez-moi de donner un exemple:
J'ai une définition de classe/interface générique:
interface IGenericCar< T > {...}
J'ai une autre classe/interface que je veux mettre en relation avec la classe ci-dessus, par exemple:
interface IGarrage< TCar > : where TCar: IGenericCar< (**any type here**) > {...}
Fondamentalement, je veux que mon IGarrage générique dépende de IGenericCar
, que ce soit IGenericCar<int>
Ou IGenericCar<System.Color>
, Car je n'ai aucune dépendance à ce type.
Il y a généralement 2 façons d'y parvenir.
Option1: Ajoutez un autre paramètre à IGarrage
représentant le T
qui doit être passé dans le IGenericCar<T>
contrainte:
interface IGarrage<TCar,TOther> where TCar : IGenericCar<TOther> { ... }
Option2: Définissez une interface de base pour IGenericCar<T>
qui n'est pas générique et contraint à cette interface
interface IGenericCar { ... }
interface IGenericCar<T> : IGenericCar { ... }
interface IGarrage<TCar> where TCar : IGenericCar { ... }
Serait-il logique de faire quelque chose comme:
interface IGenericCar< T > {...}
interface IGarrage< TCar, TCarType >
where TCar: IGenericCar< TCarType > {...}