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; }
>
I only ever expose public fields when they're (static) constants - and even then I'd usually use a property.
By "constant" I mean any readonly, immutable value, not just one which may be expressed as a "const" in C#.
Even readonly instance variables (like Result and Message) should be encapsulated in a property in my view.
See this article for more details.