2
respostas

Impedir criação de um objeto quando não temos o parâmetro esperado

Código:

namespace 7ByteBank { public class ContaCorrente { public Cliente Titular { get; set; }

    //propriedade que pertence a clasee, todos os objetos da classe compartilham essa prop;
    public static int TotalDeContasCriadas { get; private set; }

    //constructor
    public ContaCorrente(int agencia, int numero)
    {
        if ((agencia <= 0) || (numero <= 0))
            return;
        else
        {
            Agencia = agencia;
            Numero = numero;
        }

        TotalDeContasCriadas++;
    }

    private int _agencia;
    public int Agencia
    {
        get
        {
            return _agencia;
        }

        set
        {
            if (value <= 0)
                return;

            _agencia = value;
        }
    }
    private int _numero;
    public int Numero
    {
        get
        {

            return _numero;
        }

        set
        {
            if (value <= 0)
                return;

            _numero = value;
        }

    }

    private double _saldo = 100;
    public double Saldo
    {
        get
        {
            return _saldo;
        }
        set
        {
            if (value < 0)
            {
                return;
            }

            _saldo = value;
        }
    }

    public bool Sacar(double valor)
    {
        if (this._saldo < valor)
        {
            return false;
        }

        this._saldo -= valor;
        return true;
    }

    public void Depositar(double valor)
    {
        this._saldo += valor;
    }

    public bool Transferir(double valor, ContaCorrente contaDestino)
    {
        if (this._saldo < valor)
            return false;

        this._saldo -= valor;
        contaDestino.Depositar(valor);
        return true;
    }
}

}

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;

namespace 7ByteBank { class Program { static void Main(string[] args) { ContaCorrente conta = new ContaCorrente(0, 0);

        //conta.Numero = 86712540;

        Console.WriteLine("conta: " + conta.Numero + "/ agência: " + conta.Agencia);

        ContaCorrente contaDaGabriela = new ContaCorrente(867, 86745820);

        Console.WriteLine("Toatl de contas criadas: " + ContaCorrente.TotalDeContasCriadas);

        Console.ReadLine();
    }
}

}

2 respostas

Olá Thiago! Como vai?

Um modo de fazer isso é um método que recebe por parâmetro os dois valores. Caso algum deles seja um número inválido, ele não faz nada. Caso sejam valores válidos, você faz a criação do objeto.

Ou seja, uma função que retorna o tipo do objeto que recebe dois valores inteiros. Se algum dos dois valores for zero ou negativo, então retorna null e escreve uma mensagem de erro. Senão, cria o objeto, e retorna esse objeto. Tudo isso pode ser colocado dentro de uma variável do tipo do objeto.

O quarto curso trata de exceções, que seria um outro jeito de fazer isso.

Espero que tenha ajudado e bons estudos!

Fala Thiago, tem varias formas de alcancar essa solucao. Sugeriria voce ler um pouco sobre design patterns, especialmente os criacionais. Mas enfim, segue abaixo uma possivel solucao para seu problema:

 class ContaCorrente
    {
        public int Agencia { get; private set; }
        public int Numero { get; private set; }

        private ContaCorrente(int agencia, int numero)
        {
            Agencia = agencia;
            Numero = numero;
        }
        public static ContaCorrente GetInstancia(int agencia, int numero)
        {
            if (agencia <= 0 || numero <=0)
            {
                Console.WriteLine("Agencia ou Numero nao podem ser menor ou igual a zero");
                return null;
            }
            return new ContaCorrente(agencia, numero);
        }
    }

Criei um metodo estatico responsavel por criar os objetos e deixe o construtor como privado para nao ser acessado diretamente. Se as condicoes que informou nao forem satisfeitas voce poderia dar uma exception ali, mas prefiri so mandar uma mensagem na tela alem de setar o objeto como nulo. Se as condicoes sao satisfeitas voce tem o objeto criado chamando o construtor passando os parametros agencia e numero.

Espero ter ajudado.