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

Poderia dar um exemplo sobre o uso do this no construtor?

Quero entender as vantages, quando utilizar ou nao.

2 respostas
solução!

Opa, Guilherme. Beleza?

É possível criar várias sobrecargas de construtores em uma classe, assim como podemos criar várias sobrecargas de métodos.

Podemos ter um método RealizarTransferencia com uma data de agendamento:

public void RealizarTransferencia(double valor, ContaCorrente destino, DateTime data)
{
  ...
}

Mas, para realizar a tranferência imediatamente, o argumento data não importa, será a data atual. Então podemos criar a sobrecarga sem este argumento:

public void RealizarTransferencia(double valor, ContaCorrente destino)
{
  ...
}

Como a lógica de transferência já foi escrita na sobrecarga mais genérica, com mais argumentos, o mais correto é chamar a sobrecarga mais completa a partir da simplificada:

public void RealizarTransferencia(double valor, ContaCorrente destino)
{
  RealizarTransferencia(valor, destino, DateTime.Now);
}

O mesmo conceito se aplica com construtores!Podemos ter um construtor com mais opções (ContaCorrente com número, agência e saldoInicial) e outro com menos(só o número e agência):

public ContaCorrente(int numero, int agencia)
{
  Numero = numero;
  Agencia = agencia;
}

public ContaCorrente(int numero, int agencia, double saldoInicial)
{
  Numero = numero;
  Agencia = agencia;
  Depositar(saldoInicial);
}

Perceba que estamos repetindo a lógica das atribuições! Não seria melhor centralizar isto em apenas um lugar? Então, assim como nas sobrecargas de métodos, o construtor com menos argumentos pode chamar o construtor mais completo:

public ContaCorrente(int numero, int agencia) : this(numero, agencia, 0)
{
  // codigo executado após o construtor chamado com "this(numero, agencia, 0)"
}

public ContaCorrente(int numero, int agencia, double saldoInicial)
{
  Numero = numero;
  Agencia = agencia;
  Depositar(saldoInicial);
}

O que você acha? Resolvi sua dúvida?

Abs.

Resolveu sim, muito obrigado Guilherme.