C# универсальный "где ограничение" с определением "любой универсальный тип"?
Позвольте мне привести пример:
У меня есть общее определение класса / интерфейса:
interface IGenericCar< T > {...}
У меня есть другой класс / интерфейс, который я хочу связать с классом выше, например:
interface IGarrage< TCar > : where TCar: IGenericCar< (**any type here**) > {...}
По сути, я хочу, чтобы мой общий IGarrage зависел от IGenericCar
независимо от того, если это IGenericCar<int>
или же IGenericCar<System.Color>
потому что у меня нет никакой зависимости от этого типа.
2 ответа
Как правило, есть 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 { ... }
Есть ли смысл делать что-то вроде:
interface IGenericCar< T > {...}
interface IGarrage< TCar, TCarType >
where TCar: IGenericCar< TCarType > {...}