C#: в чем разница между readonly и const?

318
10 апреля 2017, 03:48

Привет всем! В C# есть const и readonly. В сети нашел только информацию о разнице static readonly и const. А какая разница между просто readonly и const?

Answer 1

Значения полей с модификатором const при компиляции подставляются в тех местах кода, где к ним происходит обращение. Это значит, что в случае, когда такое поле объявлено в классе одной сборки, а используется классами другой сборки, для того чтобы измененное значение было применено в зависимой сборке, потребуется перекомпиляция зависимой сборки. Задать значение можно только в момент объявления. В общем то const-поля это не совсем поля.

Поля с модификатором readonly являются полноценными полями, с той разницей, что изменять их значение разрешено только в конструкторе. Соответственно static readonly - в статическом конструкторе (код инициализации полей при объявлении переносится в конструктор компилятором). Таким образом, значения readonly-полей могут, например вычисляться на основе параметров переданных в конструктор, что невозможно для const-полей.

В большинстве случаев рекомендуется использовать именно readonly-поля вместо const-полей когда ваш проект включает более одного модуля.

А еще у нас тут есть шикарный список литературы рекомендуемой к прочтению для изучения C# и .NET. Книги в списке условно разделены по уровню сложности. Большую часть из них можно найти в сети в электронном виде, было бы желание. Так уж получается, что без чтения книжек программисту не обойтись.

READ ALSO
Можно ли методы класса выносить в разные файлы

Можно ли методы класса выносить в разные файлы

Иногда класс содержит большое количество методов, свойств и прочегоХотелось бы как-то это дело сделать более читаемым

248
Получить поля объекта в массиве php

Получить поля объекта в массиве php

Есть массивКаждый элемент массива представляет собой объект с двумя полями

308
Русская дата, +n дней

Русская дата, +n дней

Есть ли более лучшее решение?

260