When I write a class I always expose private fields through a public property like this:
private int _MyField;
public int MyField
{ get{return _MyField; }
>
The best practice is to use properties for several reasons. First, it decouples the API from the underlying data structure. Second, anything built into the framework that binds to objects does to to properties, not fields.
I'm sure there are more reasons, but those two always seem to be enough for me.