Обычно чисто частное автоматически реализуемое свойство также может быть частным полем.
В качестве краткого эмпирического правила ограничивайте все настолько, насколько вы можете, не причиняя слишком много боли. Если ничто другое в вашей сборке не использует эти свойства (или должно разумно использовать эти свойства), то сделать их закрытыми (и, возможно, сделать их простыми полями) - хороший подход.
РЕДАКТИРОВАТЬ: Хорошо, теперь, когда мы говорим о полях, определенно, определенно сделать их частными. Неприватные поля должны быть невероятно редкими - почти единственное, что я могу придумать, это константы (будь то на самом деле const
или просто только для чтения статические поля неизменяемого типа). Даже тогда я обычно использовал бы свойства. Просто иногда для игр и других критических для производительности ситуаций, стоит нарушать правила - но вы должны сначала понять и соблюдать эти правила.
Поля - это реализация подробно - то, как именно вы храните данные в объекте, не должно быть интересным для другого кода, пытающегося использовать этот объект. Сосредоточьтесь на разнице между API, который должен поддерживать тип, и реализацией этого API.