Although automatic properties blur the distinction quite a bit, there is a fundamental difference between a field and a property:
- A field is a data member capable of storing things,
- A property is a method or a pair of methods which, through help of the compiler, can be used as if they were a field.
In other words, when you write
public float musicBPM { get; set; }
the compiler creates something like this:
private float musicBPM_property;
public float musicBPM {
get { return musicBPM_property; }
set { musicBPM_property = value; }
}
When you make an automatic property, the field is still there, but the compiler cleverly hides it from you.
That is why the fields are going to remain as a concept in .NET. However, automatic read-only properties of C# 6 make it possible to eliminate fields from the code that you write manually.