Da trilha de C# Este conceito ainda não saiu como card do dia. ir para o card de hoje

C# POO Básico

Propriedades

Em C#, uma propriedade é um membro que fornece acesso flexível a um campo, usando os acessadores get e set. Ela parece um campo para quem usa, mas internamente pode conter lógica. Isso permite validar valores, calcular resultados ou controlar a mutabilidade.

As auto-properties são a forma mais simples: o compilador cria um campo privado implícito. Você pode inicializá-las diretamente ou no construtor. Já o acessador init permite que a propriedade seja definida apenas durante a inicialização do objeto, garantindo imutabilidade após a construção.

As propriedades calculadas não armazenam valor; seu get (e opcionalmente set) é uma expressão que deriva de outros membros. São úteis para expor informações derivadas sem duplicar dados.

Neste card, você verá como declarar e usar esses quatro recursos, que são a base do encapsulamento em C#.

Pontos-chave

  • Propriedades usam get para leitura e set para escrita, podendo conter validação.
  • Auto-properties ({ get; set; }) geram um campo de apoio automaticamente.
  • O acessador init permite atribuir valor apenas na criação do objeto.
  • Propriedades calculadas não armazenam estado; retornam uma expressão.
  • Você pode controlar a visibilidade de get e set separadamente.
Propriedades.cs
using System;

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

    // Propriedade com validação no set
    private decimal _preco;
    public decimal Preco
    {
        get => _preco;
        set
        {
            if (value < 0)
                throw new ArgumentException("Preço não pode ser negativo");
            _preco = value;
        }
    }

    // Propriedade calculada: não armazena valor
    public decimal PrecoComDesconto => _preco * 0.9m;

    // Construtor para inicializar Nome (init)
    public Produto(string nome)
    {
        Nome = nome;
    }
}

public class Program
{
    public static void Main()
    {
        var p = new Produto("Caneta") { Preco = 10.0m };
        Console.WriteLine($"Produto: {p.Nome}");
        Console.WriteLine($"Preço: {p.Preco:C}");
        Console.WriteLine($"Com desconto: {p.PrecoComDesconto:C}");

        // p.Nome = "Lápis"; // Erro: init só permite na inicialização
        // p.Preco = -5;      // Lança exceção
    }
}

Exercícios

  1. 1
    Fácil

    Criando uma auto-property com init

    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.

    Resolver
  2. 2
    Médio

    Propriedade com validação no set

    Crie uma classe ContaBancaria com uma propriedade Saldo do tipo decimal. O set deve impedir valores negativos, lançando ArgumentException. No Main, tente definir um saldo negativo e capture a exceção, exibindo uma mensagem.

    Resolver
  3. 3
    Desafio

    Propriedade calculada e init com validação

    Crie uma classe Retangulo com propriedades Largura e Altura do tipo double, ambas com init e validação para não aceitar valores negativos. Adicione uma propriedade calculada Area que retorna Largura * Altura. No Main, crie um retângulo, exiba a área e tente criar outro com largura negativa, capturando a exceção.

    Resolver

Continue estudando