С# generic "where constraint" с определением "любого общего типа"?
Позвольте мне привести пример:
-
У меня есть общее определение класса/интерфейса:
interface IGenericCar< T > {...}
-
У меня есть другой класс/интерфейс, который я хочу связать с вышеприведенным классом, например:
interface IGarrage< TCar > : where TCar: IGenericCar< (**any type here**) > {...}
В принципе, я хочу, чтобы мой общий IGarrage зависел от IGenericCar
, независимо от того, был ли он IGenericCar<int>
или IGenericCar<System.Color>
, потому что у меня нет зависимости от этого типа.
Ответы
Ответ 1
Как правило, есть 2 способа добиться этого.
Вариант 1. Добавьте в IGarrage
еще один параметр, представляющий T
который следует передать в IGenericCar<T>
:
interface IGarrage<TCar,TOther> where TCar : IGenericCar<TOther> { ... }
Вариант 2. Определите базовый интерфейс для IGenericCar<T>
который не является универсальным и ограничен этим интерфейсом.
interface IGenericCar { ... }
interface IGenericCar<T> : IGenericCar { ... }
interface IGarrage<TCar> where TCar : IGenericCar { ... }
Ответ 2
Будет ли смысл делать что-то вроде:
interface IGenericCar< T > {...}
interface IGarrage< TCar, TCarType >
where TCar: IGenericCar< TCarType > {...}