Questão de Programação — C Sharp — Quadrix 2025
- Código
- qg596729
- Banca
- Quadrix
- Órgão
- CRC-SP
- Ano
- 2025
- Nível
- Superior
- Cargo
- Analista de Desenvolvimento
- CCerto
- EErrado
GabaritoE — Errado
Gabarito: letra E (ERRADO). A afirmação está incorreta porque C# é uma linguagem fortemente tipada e estaticamente tipada, e não fracamente tipada. Embora C# ofereça o recurso de inferência de tipos com a palavra-chave var, isso não elimina a tipagem forte da linguagem — o tipo da variável é definido em tempo de compilação e não pode ser alterado durante a execução.
A tipagem de uma linguagem de programação é um conceito fundamental que se divide em dois eixos principais: forte × fraca e estática × dinâmica. A tipagem forte refere-se ao rigor com que a linguagem trata os tipos de dados, impedindo ou restringindo operações entre tipos incompatíveis sem conversão explícita. Já a tipagem estática significa que o tipo de uma variável é definido em tempo de compilação, antes da execução do programa. C# se enquadra em ambas as categorias: é fortemente tipada porque não permite, por exemplo, somar um inteiro com uma string sem conversão explícita, e é estaticamente tipada porque o tipo de cada variável é verificado e fixado durante a compilação.
A confusão que a banca explora nesta questão é a existência da palavra-chave var em C#. Muitos candidatos interpretam que var significa que a variável não precisa ser tipada, o que é um equívoco. Na verdade, var é uma declaração implícita de tipo: o compilador infere o tipo da variável a partir do valor atribuído, mas o tipo é definido estaticamente em tempo de compilação. Por exemplo, ao escrever var numero = 10;, o compilador infere que numero é do tipo int, e essa variável não poderá receber uma string posteriormente. Isso é diferente de linguagens fracamente tipadas e dinamicamente tipadas, como JavaScript, onde uma variável pode mudar de tipo durante a execução.
Para ilustrar a diferença na prática, considere o seguinte código em C#:
var numero = 10; // o compilador infere que numero é int
numero = "texto"; // erro de compilação: não é possível converter string em intEm JavaScript, o equivalente seria:
let numero = 10; // numero é um número
numero = "texto"; // permitido: a variável muda de tipo dinamicamenteEssa distinção é crucial: enquanto JavaScript é dinamicamente tipada (o tipo é definido em tempo de execução) e fracamente tipada (permite coerções implícitas), C# é estaticamente tipada (o tipo é definido em tempo de compilação) e fortemente tipada (exige conversões explícitas para operações entre tipos incompatíveis).
A pegadinha desta questão está em associar a inferência de tipos (var) com tipagem fraca. A banca tenta induzir o candidato a pensar que, por existir var, as variáveis em C# não precisam ser tipadas explicitamente, o que é verdade apenas em parte: elas não precisam ser declaradas com o tipo explícito, mas o tipo é inferido e fixado pelo compilador. A linguagem continua sendo fortemente tipada, pois o tipo é verificado rigorosamente em tempo de compilação.
A banca troca o conceito de inferência de tipos (var) por tipagem fraca. O candidato que conhece var pode achar que C# é fracamente tipada, mas var apenas infere o tipo em tempo de compilação — a linguagem continua fortemente tipada e estaticamente tipada. Lembre-se: var não é o mesmo que dynamic em C#; dynamic sim permite mudança de tipo em tempo de execução, mas é uma exceção que deve ser usada com cautela.
A afirmação "Em C#, as variáveis não precisam ser tipadas explicitamente, pois a linguagem é fracamente tipada" está errada por dois motivos:
C# é fortemente tipada, não fracamente tipada. A linguagem exige que operações entre tipos incompatíveis sejam feitas com conversão explícita (cast), e o compilador verifica a compatibilidade de tipos em tempo de compilação.
As variáveis podem não ser tipadas explicitamente graças à inferência de tipos com var, mas isso não torna a linguagem fracamente tipada. O tipo é inferido pelo compilador e permanece fixo durante toda a execução.
A alternativa confunde o recurso de inferência de tipos com tipagem fraca, que são conceitos distintos. A inferência de tipos é uma característica de linguagens estaticamente tipadas que permite omitir a declaração explícita do tipo, enquanto a tipagem fraca refere-se à permissividade da linguagem em realizar coerções implícitas entre tipos diferentes.
Gabarito: letra E (ERRADO).
Link permanente: /questoes/qg596729