Приведу пример:
У меня есть определение общего класса / интерфейса:
interface IGenericCar< T > {...}
У меня есть другой класс / интерфейс, который я хочу связать с классом выше, например:
interface IGarrage< TCar > : where TCar: IGenericCar< (**any type here**) > {...}
По сути, я хочу, чтобы мой общий IGarrage зависел от него IGenericCar
, независимо от того, является он IGenericCar<int>
или IGenericCar<System.Color>
, потому что у меня нет никакой зависимости от этого типа.
источник
T
внутриIGarage<TCar>
? Я не вижу возможности в варианте 2. Лучшим решением было быIGarage<TCar>
найти типT
путем анализа типаTCar
.IGarage<IGenericCar<?>>.TellMeAboutCarsInGeneral()
, что, вероятно, было бы результатом плохого дизайна), но я сделал это в своей работе, и это возможно.IGarrage<TCar>
самом деле обрабатывает базовый универсальный тип (например, он обрабатывает свойство указанного типа), то ему необходимо знать тип, который требует, чтобы вы указали тип, который является вариантом 1 (тогда единственный жизнеспособный вариант). Однако, еслиIGarrage<TCar>
не обрабатывает непосредственно базовый универсальный тип (весьIGarrage<TCar>
код не зависит от этого базового типа), то допустим вариант 2.Имеет ли смысл делать что-то вроде:
источник