Fácil C#

Criando uma auto-property com init

Enunciado

Crie uma classe Pessoa com uma propriedade Nome do tipo string que só possa ser definida na inicialização do objeto (use init). No Main, crie uma instância passando o nome e exiba-o.

Requisitos

  • A propriedade Nome deve usar { get; init; }.
  • O objeto deve ser criado com um inicializador de objeto ou construtor.
  • O programa deve compilar e exibir o nome.

Código inicial

using System;

public class Pessoa
{
    // TODO: declarar propriedade Nome com init
}

public class Program
{
    public static void Main()
    {
        // TODO: criar pessoa e exibir nome
    }
}

Saída esperada

Nome: Ana
Ver dica

Use public string Nome { get; init; } e crie o objeto com new Pessoa { Nome = "Ana" }.

Mostrar solução
using System;

public class Pessoa
{
    // Auto-property com init: só pode ser atribuída na criação
    public string Nome { get; init; }
}

public class Program
{
    public static void Main()
    {
        // Inicializador de objeto define Nome no momento da construção
        var p = new Pessoa { Nome = "Ana" };
        Console.WriteLine($"Nome: {p.Nome}");
    }
}

Passo a passo

  1. Declaramos a classe Pessoa com uma propriedade Nome usando { get; init; }. Isso cria um campo de apoio automaticamente e permite leitura e atribuição apenas na inicialização.
  2. No Main, criamos uma instância de Pessoa com a sintaxe de inicializador de objeto: new Pessoa { Nome = "Ana" }.
  3. O compilador chama o init de Nome durante a construção, atribuindo o valor.
  4. Depois de criado, o objeto não permite mais alterar Nome (tentativas geram erro de compilação).
  5. Exibimos o valor com Console.WriteLine.

Por que funciona

O acessador init é como um set especial que só pode ser chamado durante a inicialização do objeto — seja no construtor, seja em um inicializador de objeto. Isso garante que a propriedade seja imutável após a criação, promovendo segurança e clareza.

Erros comuns

  • Tentar alterar depois de criado: p.Nome = "Bia"; gera erro CS8852: "Propriedade ou indexador somente init não pode ser atribuído exceto em um inicializador de objeto ou no construtor".
  • Esquecer de inicializar: se Nome não for atribuído, ele fica null (para tipos de referência). Use required ou inicialize no construtor se necessário.
  • Usar set em vez de init: com set, a propriedade poderia ser alterada depois, contrariando o requisito.

Outra forma de resolver

Se precisar de validação, pode usar um construtor:

public Pessoa(string nome) => Nome = nome;

E criar com new Pessoa("Ana"). É preferível quando a lógica de inicialização é mais complexa.

Saída esperada

Nome: Ana