Lição 9: Generics e variância
Sem generics, toda estrutura de dados se duplica: AppleBasket, OrangeBasket — ou pior, uma cesta de object com conversões perigosas em tempo de execução. Nesta lição vamos escrever uma classe com um parâmetro de tipo <T>, e entender quando out e in permitem que uma cesta de maçãs ocupe o lugar de um
Generics são como uma única forma de assar preenchida com uma massa diferente a cada vez — a forma nunca muda, só o conteúdo. E a regra de segurança é simples: tirar "uma fruta" de uma caixa de maçãs é seguro, mas jogar uma melancia dentro dela não é.
- Generics e variância
- Parâmetros de tipo permitem que uma classe ou interface atenda a todo tipo com segurança; a variância (out/in) decide quando uma subclasse pode substituir um tipo base.
- parâmetro de tipo <T>
- Um tipo espaço reservado que o código chamador preenche — Basket<Apple>, Basket<string> — imposto pelo compilador em tempo de compilação, sem conversões.
- covariância (out)
- Quando T aparece só como saída, IProducer<Apple> é permitido como IProducer<Fruit> — tudo que sai é uma fruta. A direção reversa, in, cobre T que só entra.