Потому что язык этого не позволяет.
Это может показаться легкомысленным ответом: в конце концов, разработчики языка могли бы объявить, что если вы используете readonly
для автоматического свойства, то это будет означать, что свойство можно установить, но только в конструктор».
Но функции не предоставляются бесплатно. (Эрик Ганнерсон выражает это как «Каждая функция начинается с минус 100 баллов .») Для реализации автоматических свойств, доступных только для чтения, потребовались бы дополнительные усилия компилятора для поддержки модификатора readonly для свойства (в настоящее время он применяется только к fields), чтобы сгенерировать соответствующее вспомогательное поле и преобразовать sets
свойства в присвоения вспомогательному полю. Это довольно трудоемкая работа для поддержки того, что пользователь мог бы сделать достаточно легко, объявив поле для чтения только для чтения и записав однострочное средство получения свойств, и эта работа обойдется в невыполнение других функций.
Так что, если серьезно, ответ таков: либо разработчики и исполнители языка либо никогда не думали об этой идее, либо - что более вероятно - они думали, что это было бы неплохо, но решили, что есть лучшие места, где можно потратить их. ограниченные ресурсы. Не существует технических ограничений, которые мешают разработчикам и исполнителям языка предоставлять предлагаемую вами функцию: причины в большей степени связаны с экономикой разработки программного обеспечения.