С ридонли полями примерно так же как и с private set пропертями в плане читаемости. Т.е. для того чтобы понять является ли класс изменяемым нам все равно нужно смотреть внутрь этого класса, по сигнатуре это непонятно. Тут бы помогло ключевое слово immutable.
>P.S. Почему статья не оформлена как перевод?
Я думаю свои статьи не очень правильно оформлять переводом, хотя тут не уверен насчет правил хабра.
Тут я с вами (увж автор) не соглашусь, readonly пресекают изменяемость на корню а вот private set просто не позволяют изменить содержимое снаружи класса. В плане читаемости, когда видишь такое дело тут же ждешь подвоха, а нет ли тут moving parts которые провоцируются внутренним поведением класса.
* сериализация (например, стандартный XmlSerializer требует публичных read-write свойств и конструкторы без параметров)
* ORM (например, EntityFramework плохо дружит с read-only коллекциями)
Tогда перестаёт работать конструкция типа db.Orders.Include(o => o.InternalOrderLines), вылетает с «A specified Include path is not valid. The EntityType 'Order' does not declare a navigation property with the name 'InternalOrderLines'.»
Functional C#: Immutability