Other then what has already been answered, Performance, symantics and completness there is one valid case I have seen for private properties instead of a private field:
public class Item
{
private Item _parent;
private List<Item> _children;
public void Add(Item child)
{
if (child._parent != null)
{
throw new Exception("Child already has a parent");
}
_children.Add(child);
child._parent=this;
}
}
Let's say that we don't want to expose Parent for whatever reason, but we might also want to do validation checks. Should a parent be able to be added as a child to one of its children?
To resolve this you can make this a property and perform a check for circular references.