Deixe-me dar um exemplo:
Tenho algumas definições genéricas de classe / interface:
interface IGenericCar< T > {...}
Tenho outra classe / interface que quero relacionar com a classe acima, por exemplo:
interface IGarrage< TCar > : where TCar: IGenericCar< (**any type here**) > {...}
Basicamente, quero que meu IGarrage genérico seja dependente IGenericCar
, independentemente de ser IGenericCar<int>
ou IGenericCar<System.Color>
, porque não tenho nenhuma dependência desse tipo.
c#
generics
where
type-constraints
Nenad
fonte
fonte
T
dentro doIGarage<TCar>
? Não consigo ver nenhuma possibilidade na opção2. A melhor solução seriaIGarage<TCar>
encontrar o tipoT
analisando o tipoTCar
.IGarage<IGenericCar<?>>.TellMeAboutCarsInGeneral()
, o que provavelmente seria o resultado de um design ruim), mas fiz isso em meus ajustes, e é possível.IGarrage<TCar>
realmente lida com o tipo genérico subjacente (por exemplo, lida com uma propriedade desse tipo), então ele precisa saber o tipo, o que requer que você especifique o tipo, que é a opção 1 (a única opção viável então). No entanto, seIGarrage<TCar>
não tratar diretamente o tipo genérico subjacente (todo oIGarrage<TCar>
código é agnóstico desse tipo subjacente), a opção 2 é válida.Faria algum sentido fazer algo como:
fonte