Capítulo 4. Genéricos
Este trabalho foi traduzido com recurso a IA. Agradecemos o teu feedback e comentários: translation-feedback@oreilly.com
No Capítulo 3, mostrei como escrever tipos e descrevi os vários tipos de membros que eles podem conter. No entanto, há uma dimensão extra para classes, structs, interfaces e métodos que eu não mostrei. Eles podem definir parâmetros de tipo, espaços reservados que te permitem inserir diferentes tipos em tempo de compilação. Isto permite-te escrever apenas um tipo e depois produzir várias versões do mesmo. Um tipo que faz isto chama-se um tipo genérico. Por exemplo, as bibliotecas de tempo de execução definem uma classe genérica chamada List<T> que actua como um array de comprimento variável. T é um parâmetro de tipo aqui, e podes usar quase qualquer tipo como argumento, por isso List<int> é uma lista de inteiros, List<string> é uma lista de strings, e assim por diante.1 Também podes escrever um método genérico, que é um método que tem os seus próprios argumentos de tipo, independentemente de o tipo que o contém ser genérico.
Os tipos e métodos genéricos são visualmente distintos porque têm sempre parênteses angulares (< e >) após o nome. Estes contêm uma lista de parâmetros ou argumentos separados por vírgulas. A mesma distinção parâmetro/argumento aplica-se aqui como com os métodos: a declaração especifica uma lista de parâmetros, e depois, quando vieres a usar o método ou tipo, forneces argumentos para esses parâmetros. Assim, List<T>