While reading Jon Skeet\'s article on fields vs properties he mentions that changing fields to properties is a breaking change.
I would like to understand the common
If you have a public field and another assembly has code that is using it, it will need to be recompiled.
IOW the definition of breaking includes "will need to be recompiled".
In Windows Forms at least, you can only databind things like DataGridViewColumns to properties on your business objects, not fields. So if your class was being used as a DataSource for a grid, its properties changing to fields would result in some new bugs for the grid owner.
You can pass a field as a ref
or out
parameter, or take its address in an unsafe context, whilst you cannot do these with a property.
Properties can throw any arbitrary exceptions, whereas fields can't (at least when compiler knows about field assignment at compile time).