Inicialização de objetos em C#
Gabarito: letra D. As três afirmações sobre inicialização de objetos em C# são verdadeiras: a inicialização de objetos permite atribuir valores a propriedades ou campos no momento da criação do objeto (I), reduz a necessidade de construtores sobrecarregados para diferentes combinações de parâmetros (II) e suporta a inicialização de objetos aninhados e coleções (III). Esse recurso é uma sintaxe da linguagem C# que simplifica a criação e configuração de objetos, conforme a documentação oficial da Microsoft.
A inicialização de objetos é um recurso da linguagem C# que permite definir valores iniciais para propriedades ou campos públicos de um objeto diretamente na expressão de criação, usando a sintaxe new Tipo { Propriedade = valor }. Ela foi introduzida no C# 3.0 e é amplamente utilizada para tornar o código mais conciso e legível. Em vez de escrever várias linhas para instanciar um objeto e depois atribuir cada propriedade, você pode fazer tudo em uma única expressão.
O principal benefício é a redução da necessidade de construtores sobrecarregados. Sem a inicialização de objetos, para criar um objeto com diferentes combinações de valores, seria necessário definir vários construtores, cada um aceitando um conjunto diferente de parâmetros. Com a inicialização de objetos, você pode usar um construtor padrão (sem parâmetros) e configurar apenas as propriedades desejadas, eliminando a necessidade de múltiplas sobrecargas. Isso torna o código mais flexível e fácil de manter.
Além disso, a sintaxe de inicialização de objetos suporta a inicialização de objetos aninhados e coleções. Por exemplo, você pode inicializar uma propriedade que é um objeto complexo usando a sintaxe new Tipo { Propriedade = new SubTipo { ... } }, ou inicializar uma coleção com elementos usando new Tipo { Lista = { item1, item2 } }. Isso permite criar estruturas de dados complexas de forma declarativa e legível.
É importante distinguir a inicialização de objetos de outros conceitos relacionados, como construtores e propriedades. Enquanto os construtores são métodos especiais chamados na criação do objeto para inicializar seu estado, a inicialização de objetos é uma sintaxe que atua após a chamada do construtor, atribuindo valores às propriedades ou campos acessíveis. Ela não substitui a necessidade de construtores em todos os casos, mas complementa, oferecendo uma alternativa mais simples para configuração inicial.
A pegadinha que a banca pode explorar é confundir a inicialização de objetos com a criação de objetos via construtores ou com a sintaxe de coleções. No entanto, nesta questão, todas as afirmações estão corretas, e a resposta é a letra D. Vamos analisar cada item.
Item I — ✅ Correto
A afirmação I está correta. A inicialização de objetos permite atribuir valores a propriedades ou campos no momento da criação do objeto. Isso é exatamente o que a sintaxe new Tipo { Propriedade = valor } faz: após o construtor ser executado, as propriedades ou campos especificados são definidos com os valores fornecidos, tudo na mesma expressão de criação.
Item II — ✅ Correto
A afirmação II está correta. A sintaxe de inicialização de objetos reduz a necessidade de construtores sobrecarregados. Em vez de criar vários construtores para diferentes combinações de parâmetros, você pode usar um construtor padrão e inicializar apenas as propriedades desejadas. Isso simplifica o código e evita a proliferação de sobrecargas.
Item III — ✅ Correto
A afirmação III está correta. É possível inicializar objetos aninhados e coleções com a sintaxe de inicialização de objetos. Por exemplo, você pode inicializar uma propriedade que é um objeto com new Tipo { Sub = new SubTipo { ... } } e uma coleção com new Tipo { Lista = { item1, item2 } }. Essa capacidade torna a sintaxe ainda mais poderosa para construir estruturas complexas de forma declarativa.
Conclusão: Todos os itens I, II e III são verdadeiros, portanto a alternativa correta é a letra D.
Gabarito: letra D