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

Duvida basica sobre propriedades

Aprendendo propriedades, tem algo que ainda não consigo entender direito e por enquanto não faz sentido para mim em relação as propriedades no C#.

Porque usar um atributo privado, para logo depois criar um atributo publico de praticamente mesmo nomes?

Por exemplo, porque fazer isso:

private int  _idade;

public int Idade
{
    get { return _idade }
    
    set
    {
        if (value > 1) 
        {
            _idade = value;
        }
    }
}

Mas isso não funciona:

public int Idade 
{
    get 
    {
        return Idade;
    }
    set 
    {
        if  (value > 1) 
        {
            Idade = value;
        }
    }
}
2 respostas
solução!

Oi, Ricardo! Tudo bem?

Excelente pergunta! No C#, a utilização de um atributo privado juntamente com uma propriedade pública é uma prática comum para implementar o que chamamos de encapsulamento, que é um dos pilares da programação orientada a objetos e serve para proteger os dados da classe de acessos e modificações indevidas.

No exemplo dado, o atributo _idade é privado, o que significa que ele não pode ser acessado diretamente de fora da classe, o que é útil porque permite que o controle sobre como esse valor é modificado ou acessado seja feito de maneira controlada, através dos métodos get e set da propriedade Idade.

Por exemplo, no set, há uma condição que só permite atribuir um valor à _idade se esse valor for maior que 1. Isso é uma regra de negócio que você está impondo, e fazendo isso dentro do set, você garante que essa regra sempre será respeitada, não importa de onde ou como o valor está sendo atribuído à propriedade.

Já no segundo exemplo, onde tentamos utilizar a propriedade Idade diretamente dentro dos nossos próprios métodos get e set, ocorre um problema chamado de recursão infinita. Basicamente, quando tentamos retornar Idade dentro do get, ele chama o get de Idade novamente, e isso continua indefinidamente, o que eventualmente levará a um estouro de pilha (stack overflow).

Da mesma forma, no set, ao tentar atribuir um valor a Idade, ele chama o set de Idade novamente, causando o mesmo problema de recursão infinita. Portanto, a prática de usar um atributo privado com uma propriedade pública não só ajuda a proteger nossos dados, mas também a implementar regras de negócio de forma segura e controlada.

Espero ter ajudado!

Um forte abraço e bons estudos!

Entendi, por isso ficava dando a mensagem de stack overflow e eu não sabia porque estava estourando. Muito Obrigado.