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

Propriedades get/set não privadas

Se no exemplo:

public Cliente Titular {get; set}

tanto a leitura quanto a escrita estão abertas, escrever o código assim:

public Cliente Titular

terá o mesmo efeito?

1 resposta
solução!

Oi Rodrigo, tudo bom?

O efeito não seria o mesmo. Primeiro porque a sintaxe do segundo não compilaria, falta um ponto e virgulhazinho no final:

public Cliente Titular;

Mesmo com o ponto e virgula não teriamos o mesmo efeito pois a primeira sintaxe está declarando uma Property Titular, com getter e setter padrões:

public Cliente Titular {get; set}

E o segundo é o atributo chamado Titular:

public Cliente Titular;

E, embora a sintaxe para acessar ambos seja a mesma, algo como:

Cliente c1 = new Cliente();
c1.Titular = "Meu titular";

No primeiro temos o atributo encapsulado. Ou seja, ele é apenas um açucar sintatico para não precisarmos escrever o getter e settter padrão, que seria algo como:

// todo atributo, por padrão deve começar com letra minuscula
// aqui temos um atributo privado!
private Cliente titular;

public Cliente getTitular(){
    return this.titular;
}
public void setTitular(Cliente titular){
    this.titular = titular;
}

Outra forma de escrever isso, utilizando property seria:

private Cliente titular;
public Cliente Titular {get;set;}

ou:

// aqui temos o atributo privado
private Cliente titular;
// aqui temos a property publica que acessa esse atributo
public Cliente Titular {
    get{
        return titular;
    };set{
        this.titular = value;
    }
;}

Utilizando properties, estamos encapsulando nossos atributos!

É a mesma coisa que ter um atributo privado com getters e setters. A gente só ta escrevendo um pouco menos.

A vantagem de utilizar essa abordagem é que se, por um acaso, sua regra de negocio mudar com o tempo, você continua tendo flexibilidade para manutenção.

Por exemplo, se precisassemos fazer alguma verificação no momento de atribuir um cliente na nossa conta utilizando as properties podemos fazer isso no proprio setter.

Com o atributo puro isso seria inviavel.

Na documentação do c# tem um exemplo bem legal da diferença entre property e atributo.

Qualquer duvida é só falar.

Abraço!