Conceitos: Tipos Anônimos (anonymous type)

Qual das próximas afirmações descrevem corretamente o código C# abaixo (selecione todas as corretas):

var pessoa = new {Id = 1, Nome = "Maria"};

A. O código tem um erro e não compila

B. pessoa pode ser reatribuída da seguinte forma: pessoa = new {Idade = 25, Nome = “Pedro”};

C. pessoa é do tipo anônimo (anonymous type)

D. pessoa deriva de Object.

E. Os atributos Id e Nome são somente leitura (read-only)

A primeira coisa a ser feita para resolver esta questão é analisar o código, que apresenta a criação de um novo objeto chamado pessoa, sem no entanto especificar um tipo. Portanto, trata-se de um “tipo anônimo” (anonymous type, em inglês).

Os Tipos Anônimos fornecem uma maneira rápida de encapsular um grupo de propriedades em único objeto, sem que seja necessário definir explicitamente o seu tipo. Os tipos dos atributos são inferidos pelo compilador e não estão disponíveis ao nível do código fonte. Além disto, eles são somente leitura (read-only).

Agora que você já sabe o que é um tipo anônimo, vamos analisar as opções:

  • Letra A:  errada, pois o código compila perfeitamente;
  • Letra B: errada, não é possível reatribuir um tipo anônimo;
  • Letra C: correta, trata-se de um tipo anônimo;
  • Letra D: correta, tupo em C# deriva de Object; e
  • Letra E: correta, já que os atributos de tipos anônimos são somente leitura;

Sendo assim, estão corretas as letras C, D e E.

Atenção

Não confunda um tipo anônimo com a nova forma de instânciar objetos introduzida no C#9, chamada target-typed object creation. Ela permite instanciar um objeto sem usar o nome da classe depois da palavra reservada new, desde que a classe tenha sido explicitamente declarada antes do nome do objeto (mais informações em docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-9.0/target-typed-new – texto em inglês).

public class Pessoa {
   public int Id;
   public string Nome;
}

(...)

//a classe "Pessoa" eh explicitamente declarada antes do objeto "pessoa", 
//não sendo necessario repetir a declaracao depois da palavra  "new"
Pessoa pessoa = new(1, "Maria");
Origem da questão
País: Holanda Tipo: Conceitos Assunto: Tipos Anônimos
Ramo de negócio da empresa: Consultoria Grau de Dificuldade: Médio