Opa, boa noite.
Os atributos e métodos de uma classe podem ser ou não utilizados por outros elementos do sistema, pra isso existem três níveis de visibilidade:
- public (Público) : aqui a propriedade ou método pode ser acessado de qualquer lugar do sistema.
- protected (Protegido) : este escopo é utilizado quanto você deseja que o método ou atributo seja visível apenas para classes que herdam a classe atual.
- private (Privado) : já aqui o atributo e o método são acessíveis apenas em sua própria classe.
Para entender melhor esse paradigma recomendo que dê uma olhada em algum material sobre Programação Orientada a Objetos.
Já o segundo ponto sobre o { get; set; } trata-se de um recurso para otimização de código, ou seja, se você utilizar esse recurso você não precisa especificar um getter ou setter para o atributo em questão, o próprio compilador irá fazer isso.
Digamos que por baixo dos panos o compilador irá fazer isso aqui:
public int Exemplo
{
get
{
return this.Exemplo;
}
set {
this.Exemplo = value;
}
}