Привет всем! В C# есть const и readonly. В сети нашел только информацию о разнице static readonly и const. А какая разница между просто readonly и const?
-
Плохо искали: http://stackoverflow.com/questions/55984/what-is-the-difference-between-const-and-readonly – Nikita Apr 08 '17 at 19:19
-
Если проще ответ вверху, то readonly можно менять в конструкторе – Владимир Apr 14 '19 at 07:25
1 Answers
Значения полей с модификатором const при компиляции подставляются в тех местах кода, где к ним происходит обращение. Это значит, что в случае, когда такое поле объявлено в классе одной сборки, а используется классами другой сборки, для того чтобы измененное значение было применено в зависимой сборке, потребуется перекомпиляция зависимой сборки. Задать значение можно только в момент объявления. В общем то const-поля это не совсем поля.
Поля с модификатором readonly являются полноценными полями, с той разницей, что изменять их значение разрешено только в конструкторе. Соответственно static readonly - в статическом конструкторе (код инициализации полей при объявлении переносится в конструктор компилятором). Таким образом, значения readonly-полей могут, например вычисляться на основе параметров переданных в конструктор, что невозможно для const-полей.
В большинстве случаев рекомендуется использовать именно readonly-поля вместо const-полей когда ваш проект включает более одного модуля.
А еще у нас тут есть шикарный список литературы рекомендуемой к прочтению для изучения C# и .NET. Книги в списке условно разделены по уровню сложности. Большую часть из них можно найти в сети в электронном виде, было бы желание. Так уж получается, что без чтения книжек программисту не обойтись.
- 16,323
-
Спасибо за развернутый ответ. Можете показать как переопределить статический конструктор (я хотел бы детальнее посмотреть как оно работает)? – Alerr Apr 08 '17 at 20:17
-
@Alerr не понял, зачем его переопределять, он не наследуется, он просто создается компилятором если вы его не создали сами. А если создали, то помещает в его начало код инциализации статических полей. – rdorn Apr 08 '17 at 20:19
-
-
2@Alerr собственно из предложенного списка Тролсен, затем Рихтер, а дальше уже сами поймете чего не хватает, но это лично мое мнение. – rdorn Apr 08 '17 at 20:27
-
@Alerr из Тролсена обязательны первые 4 части, остальное по желанию и необходимости, после этого можно переключаться на Рихтера. Рихтера целиком с компилятором под руками от корки до корки =) – rdorn Apr 08 '17 at 20:36