The difference is that you have control over the getters and setters.
With the automatic implementation, you cannot do something like:
private int age;
public int Age
{
get { return age; }
set
{
if (age != value)
{
age = value;
OnAgeChanged(EventArgs.Empty);
}
}
}
public event EventHandler AgeChanged;
protected virtual void OnAgeChanged(EventArgs e)
{
var handler = AgeChanged;
if (handler != null)
handler(this, e);
}
If you don't need this, the automatic implementation should be enough.
The main advantage over using an automatic property implementation in comparison to a field is that when you use an automatic property implementation and later on you want to change the implementation into e.g. the above, the interface of your class does not change.