web-dev-qa-db-fra.com

C # générique "où contrainte" avec la définition de "tout type générique"?

Permettez-moi de donner un exemple:

  1. J'ai une définition de classe/interface générique:

    interface IGenericCar< T > {...}

  2. 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.

102
Nenad

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 { ... }
135
JaredPar

Serait-il logique de faire quelque chose comme:

interface IGenericCar< T > {...}
interface IGarrage< TCar, TCarType > 
    where TCar: IGenericCar< TCarType > {...}
6
snarf