C# универсальный "где ограничение" с определением "любой универсальный тип"?

Позвольте мне привести пример:

  1. У меня есть общее определение класса / интерфейса:

    interface IGenericCar< T > {...}

  2. У меня есть другой класс / интерфейс, который я хочу связать с классом выше, например:

    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 > {...}
Другие вопросы по тегам