Médio C#

Propriedade com validação no set

Enunciado

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.

Requisitos

  • A propriedade Saldo deve ter get e set com validação.
  • O set deve lançar ArgumentException se o valor for negativo.
  • O Main deve capturar a exceção e exibir a mensagem.

Código inicial

using System;

public class ContaBancaria
{
    // TODO: implementar propriedade Saldo com validação
}

public class Program
{
    public static void Main()
    {
        // TODO: testar saldo negativo e capturar exceção
    }
}

Saída esperada

Erro: Saldo não pode ser negativo
Ver dica

Use um campo privado _saldo e no set verifique if (value < 0) throw new ArgumentException(...).

Mostrar solução
using System;

public class ContaBancaria
{
    private decimal _saldo;

    public decimal Saldo
    {
        get => _saldo;
        set
        {
            if (value < 0)
                throw new ArgumentException("Saldo não pode ser negativo");
            _saldo = value;
        }
    }
}

public class Program
{
    public static void Main()
    {
        var conta = new ContaBancaria();
        try
        {
            conta.Saldo = -100m; // lança exceção
        }
        catch (ArgumentException ex)
        {
            Console.WriteLine($"Erro: {ex.Message}");
        }
    }
}

Passo a passo

  1. Declaramos um campo privado _saldo para armazenar o valor real.
  2. Criamos a propriedade Saldo com get e set. O get retorna _saldo; o set valida o valor.
  3. No set, usamos value (palavra-chave implícita) para verificar se é negativo. Se for, lançamos ArgumentException com uma mensagem.
  4. Se não for negativo, atribuímos value a _saldo.
  5. No Main, criamos uma conta e tentamos definir Saldo = -100m dentro de um bloco try.
  6. O catch captura a exceção e exibe a mensagem.

Por que funciona

A propriedade encapsula o campo _saldo e impõe uma regra de negócio: saldo não pode ser negativo. Isso é possível porque o set é um bloco de código executado a cada atribuição, permitindo validações e efeitos colaterais.

Erros comuns

  • Esquecer de usar value: escrever if (_saldo < 0) em vez de if (value < 0) valida o valor antigo, não o novo.
  • Não lançar exceção: apenas ignorar o valor negativo faz o programa continuar com estado inválido.
  • Capturar exceção genérica: capturar Exception em vez de ArgumentException pode mascarar outros erros.

Outra forma de resolver

Use uma propriedade auto-implementada com validação no construtor:

public decimal Saldo { get; private set; }
public ContaBancaria(decimal saldoInicial) {
    if (saldoInicial < 0) throw new ArgumentException(...);
    Saldo = saldoInicial;
}

Preferível quando o saldo só muda via métodos da classe.

Saída esperada

Erro: Saldo não pode ser negativo