One of the advantages is that a number of frameworks look for class properties for binding purposes, and not for fields. Therefore, directly displaying the _x field causes some headaches when you wonder why the infrastructure is not setting the value, as you might expect.
Also, because of encapsulation, you can change what happens when a code call interacts with a field. Hiding the field behind the getter / setter object allows you to perform additional actions, such as starting when the value changes, updating another internal state, or completely changing the implementation, so this is just a call to the child object.
source share