Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Definindo um construtor com parâmetro e colocar uma logica no setter de valor menor ou igual ao value no campo que ira receber o valor do argumento, não impede de construir o objecto passando valor zero no construtor? PARTE 2

Pessoal, boa noite

Sei que esse assunto foi esclarecido em 2019 e que estamos em 2021, entretando como esse curso é "atemporal" a dúvida surgiu como Fenix.

Estou seguindo o projeto conforme a aula e se inicio o construtor passando parametro zero ele está imprimindo zero, não consegui encontrar onde estou errando, segue abaixo as declarações e o exemplo:

//Declarações ContaCorrente

public class ContaCorrente

{

public Cliente _Correntista { get; set; }

private int _nragencia;
public int NrAgencia
{
    get
    {
        return _nragencia;
    }
    set
    {
        if (value <= 0)
        {
            return;
        }
        _nragencia = value;
    }
}

    private int _nrconta;
public int NrConta
{
    get
    {
        return _nrconta;
    }
    set
    {
        if (value <= 0)
        {
            return;
        }

        _nrconta = value;
    }
}

... 

    public ContaCorrente(int agencia, int numero)
{
    NrConta = numero;
    NrAgencia = agencia;
}

}

//Program

    using System;

    namespace _07_ByteBank

    {

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

        Console.WriteLine("Agência: "+conta.NrAgencia);
        Console.WriteLine("Conta Corrente: " + conta.NrConta);

        Console.ReadLine();
            }
        }
    }

Está imprimindo zero

Agência: 0 Conta Corrente: 0

O que estou deixando passar ?

Att.,

Alexandre Castro

2 respostas
solução!

Fala Alexandre, Beleza?

Veja a condição que está no seu setter da sua propriedade, você não define um valor para ela caso o valor seja menor ou igual a zero, ou seja, ela irá assumir o valor default.

é exatamente isso que você está fazendo aqui :

 private int _nrconta;
public int NrConta
{
    get
    {
        return _nrconta;
    }
    set
    {
        if (value <= 0)
        {
        /*
          se o valor passado para a propriedade for menor ou igual a zero, 
          você está encerrando o método
        */
            return;
        }

        _nrconta = value;
    }
}

um return dessa forma seria o mesmo que você fazer isso:

return default;

vou dar alguns exemplos de valores:

DateTime datetime = default; //valor: 01/01/0001 00:00:00
Int number = default; //valor: 0
string name = default; //valor: null

//Todo tipo que seja Nullable, seu valor default é null
DateTime? datetime1 = default; //valor: null
Int? number1 = default; //valor: null

Olá Marcos, boa noite

Muito obrigado pelo seu retorno

Att.,

Alexandre Castro