A lot of people follow the following paradigm:
fields are always private.
properties are only used to expose fields, thus should only be public. There are plenty of exceptions to this rule (lazy loading, for example).
With auto-properties, I've found it possible to never use fields. If I need my fields to be very basic, I just use auto-properties
private int? ThisIsMoreOrLessAField { get; set; } // Actually a private property
What is generally preferred? Some people like fields because if anyone ever decides to change a field and make it public, it's very obviously bad code and easy to recognize in code-review. It's also easy to look at fields and recognized that it's private to the class. If your properties can be private, that breaks that paradigm. You have to do further inspection to determine if it's public or private.
I'm having a hard time convincing myself either way.
Lazy<Your type>
, which removes need to use property.