если вы измените значение const, вам нужно перестроить все клиенты
Это не правильное решение. Если вы измените значение const, то оно не будет константой. Константы по определению вещи, которые никогда не меняют своего значения . Идея, что вы бы изменили значение константы , означает, что вы делаете что-то логически невозможное, и поэтому, конечно, все сломается; вы делаете то, что, как вы сказали, вы не сделаете. Если вы будете лгать компилятору, и это причиняет вам боль, тогда перестанете врать компилятору .
Цена на золото не является постоянной. Название вашего банка не является константой. Номер версии вашей программы не является константой. Эти вещи меняются, поэтому не делают их постоянными . Константы - это такие вещи, как пи, или число протонов в атоме золота.
Переменные - это вещи, которые могут варьироваться - поэтому они называются «переменными». Константы - это вещи, которые остаются ... постоянными. Если он может меняться, сделайте его переменным. Если оно постоянное, сделайте его постоянным. Это так просто.
почему это? статические readonly и const статические
Конечно. Какое это имеет отношение к этому? «статический» в C # означает «именованный элемент связан с типом, а не с каким-либо конкретным экземпляром типа». («Static» - поэтому плохой выбор терминов; VB делает это лучше с «shared».)
Является ли имя связанным с типом или экземпляром, не имеет отношения к вопросу о том, относится ли имя к константе или переменной .
где на самом деле значения сохраняются в обоих статических readonly vsconst?
Когда вы используете постоянное значение, значение «запекается» везде, где оно используется. Это безопасно , потому что оно никогда не изменится . Он никогда не изменится , потому что он постоянен , и это то, что означает "константа".
Когда вы используете переменную, значение переменной ищется во время выполнения каждый раз. «Только чтение» означает, что «эта переменная может быть изменена только в конструкторе класса или инициализаторе поля». Это все еще переменная. (*)
как сделать поле статическим только для чтения - на самом деле решить эту проблему за сценой?
Вы не указали, в чем проблема, поэтому я не знаю, какую проблему вы пытаетесь решить.
(*) Поля только для чтения считаются непостоянными значениями вне конструктора, так что поле только для чтения типа изменяемого значения не может быть изменено, и поэтому вы не можете взять ref
в поле только для чтения, а затем измените ссылку.