Jon Skeet has an excellent overview on his C# article blog about why properties matter. In it he explains why properties should be used over exposing public fields.
As for why to use properties instead of getter/setter methods, I would suggest the following thoughts:
- Properties provide a cleaner, more concise syntax that is easy to understand and read.
- Properties enable assignment expression chaining:
A.x = B.y = C.z
- Properties convey the semantics of data access clearly and consistently - consumers expect that there are no side effects.
- Properties are recognized by many libraries in .NET for tasks such as XML serialization, WPF bindings, ASP.NET 2-way binding, and more.
- Properties are recognized by the IDE and many visual designers and can be displayed in a property editor.
- Properties enable support for the increment (++) and decrement (--) operators.
- Properties can be easily differentiated from methods using reflection and allow dynamic consumers to extract knowledge about the data exposed by an object.
- C# 3 supports automatic properties which helps eliminate boilerplate code.