Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

New Cliente

Qual a vantagem/objetivo de escrever:

Conta.Titular = new Cliente();

se quando eu faço:

Conta NovaConta = new Conta();

Eu tenho acesso às atribuições da classe ContaCorrente que, por sua vez, tem acesso às atribuições da classe Cliente, haja vista que na classe Cliente está escrito:

namespace _5_ByteBank
{
    public class Cliente
    {
        public string Nome;
        public string CPF;
        public string Profissao;
    }
}

Em suma, por que eu tenho que fazer -- ou por que é bom fazer:

Conta.Titular = new Cliente();

Se eu poderia somente fazer:

Conta.Titular.Nome = "Seu Zé da padaria";

Por que instanciar um novo objeto? Ou referenciar... eu ainda confundo as palavras.

1 resposta
solução!

Olá, José. Tudo bom?

Considere o exemplo de código a seguir:

Conta c = new Conta();
Console.WriteLine(c.Numero);

Quando executarmos este código, sabemos que a saída será 0. Afinal, não mudamos o valor deste atributo em nosso objeto.

Aliás, aproveitando para ajudar com a confusão de instância e referência, poderia dizer que não mudamos o atributo em nossa instância de Conta, criada com new Conta() e referenciada por c, quando fizemos a atribuição c = new Conta();

Sabemos que a saída será 0, porque, além de não alterarmos o seu valor, sabemos que Numero é do tipo int e seu valor padrão, default, é 0.

Contudo, criamos a classe Cliente e, diferente dos tipos int, double, bool, etc. que são tipos de valor o tipo Cliente é um tipo de referência.

Então, ao executar o código a seguir:

Conta c = new Conta();
c.Titular.Nome = "Pedro";

Seu programa buscará o campo Nome do objeto (podemos falar tbm "da instância") referenciada no campo Titular.

Mas, peraí, a referência em Titular nunca foi inicializada! Então ela possui o valor padrão de todo tipo de referência: null. Por isso, para não enfrentarmos este erro, é necessário atribuir a referência para algum objeto no campo Titular, seja com o código abaixo:

c.Titular = new Cliente();

Ou, algo assim:

c.Titular = pedro;

Onde pedro é uma variável do tipo Cliente

Outro benefício disso é destacado com o código abaixo:

Cliente pedro = new Cliente();
pedro.Nome = "Pedro";

ContaCorrente primeiraConta = new ContaCorrente();
primeiraConta.Titular = pedro;

ContaCorrente segundaConta = new ContaCorrente();
segundaConta.Titular = pedro;

pedro.Nome = "Pedro da Silva";
Console.WriteLine(primeiraConta.Titular.Nome); //Imprime "Pedro da Silva"
Console.WriteLine(segundaConta.Titular.Nome); //Imprime "Pedro da Silva"

Ficou mais claro? O que você acha?

Abs e bons estudos.