Это очень похоже на этот вопрос о доступе к информации в том же классе через свойства или прямой доступ. Вероятно, стоит прочитать и все эти ответы.
Лично я не хочу, чтобы какие-либо поля были непубличными, за исключением редких статических полей только для чтения с неизменяемыми значениями (постоянными или нет). Для меня свойства просто дают лучшую степень инкапсуляции. Хранение данных - это решение реализация , а не решение API (в отличие от свойств). Почему класс Foo, производный от класса Bar, должен заботиться о реализации класса Bar?
Короче говоря, я всегда обращался к свойствам, и я не использую защищенные переменные для чего-либо, кроме одноразового тестового кода.
Благодаря автоматически реализованным свойствам в C # 3.0 превратить поля в свойства стало проще, чем когда-либо прежде. Для этого есть небольшая причина , а не .