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!