There are several advantages of using properties over data members:
o Only properties can be used directly with databinding.
o When later, you need to make access to a data member thread safe, it is
easy to add for example a lock(this) to the get/sets.
o from the OOP standpoint you can inherit from a class and override the
property get/sets
o properties allow you to later add validation rules to the set methods
without having to find all locations where a public data member is accessed.
Imaging all other actions you might want to later take when
someone/something gets/set your field: logging of that activity, triggering
some other events, assisting debugging by setting a breakpoint in the
get/sets, etc...
o If you think you can always later come back and change the public data
member to a property, you will have to recompile all other assemblies that
use your class that once had the public field. That is due to public fields
and properties not being binary compatible since properties are functions
whereas public fields are direct access.
The work to hack in the get/sets will become a right click and select from
the Refactor menu to wrap the private field. Once you develop the habit of
creating properties where you once used only public fields, it really takes
no time.