В Java принято писать геттеры и сеттеры к переменным, а сами переменные делать приватными.
Причины 3:
1) После того, как код написан и пару лет поработал, будет легко добавить функциональность в геттер или сеттер не изменяя кода, которых их использует.
2) Инкапсуляция. Например так можно разрешить читать значение переменно, но запретить изменять его.
3) Соглашение JavaBeans требует этого + есть стандарт на имена геттеров и сеттеров.
С# клон Java, поэтому 2 первый причины тут так-же действуют
Но Microsoft всегда все усложняет, поэтому в язык были добавлены свойства.
Они те же геттеры\сеттеры, только с вырви глазным синтаксисом и кучей новых ключевых слов.