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!