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