Потому что, если поле не было отмечено readonly, оно может быть изменено в классе Singleton. Конечно, он по-прежнему не может быть изменен внешним миром, но синглтон действительно не является ничем, если в течение жизни вашей программы есть более одного экземпляра, а спецификатор readonly обеспечивает семантику, которую вы хотите в одноэлементный класс.
EDIT в ответ на:
- его статическую, только один экземпляр будет существовать.
- Значение can not change, так как оно не имеет сеттера.
Статические переменные, безусловно, могут быть установлены для ссылки на разные объекты во время выполнения. Значение может измениться, если только внутри класса из-за его приватности. Если класс был реализован таким образом, что поле было назначено только один раз, это не было бы проблемой на практике. Однако, поскольку предполагаемое намерение состоит в том, что экземпляр singleton никогда не изменится, модификатор readonly гарантирует эти семантики вне конструктора. Это не essential, потому что клиенты класса не могут изменить ссылку, но это предпочтительнее, потому что это: а) делает цель кода чистой и b) препятствует изменению ссылки даже внутри класса.
OMG !!! downvote .. ?? Кто-то хочет объяснить, почему? –
Не думаю, что этот вопрос плох, почему downvote? –
Кто-то пришел сюда и опустил вопрос, а также каждый ответ. Я бы не стал беспокоиться об этом. –