Важливо зрозуміти поняття програмування на C #, перш ніж приступити до реалізації коду. Перш ніж перейти до відмінностей між const і readonly, давайте розберемося спочатку ключових слів і як вони використовуються в програмі. Обидва - це найпоширеніші ключові слова, які використовуються в програмуванні на C # і в основному з однаковою метою. Однак обидва ключові слова сильно відрізняються один від одного. Const - це зарезервоване слово, яке використовується для представлення постійних значень, і воно вказує, що значення не можна змінювати після часу компіляції, тоді як readonly - це модифікатор, який можна використовувати в полях, значення яких можна змінювати під час виконання. Давайте розглянемо деякі ключові відмінності між const та readonly.
Під Const посилається на постійну змінну, значення якої потрібно призначити лише один раз під час декларування. Коли ключове слово const використовується під час декларації, воно стає постійним значенням, значення залишається постійним і не може бути змінено протягом усієї програми. Це скоріше зарезервоване слово, яке вказує, що значення не повинно бути змінено після часу компіляції. Конст за замовчуванням неявно статичний, тому його можна викликати з іменем класу за допомогою "Classname.VariableName". Постійні значення також називають буквальними. Це може бути будь-який базовий тип даних, такий як ціле число const, плаваючий const або рядковий літерал.
Ключове слово Readonly - це модифікатор, який можна використовувати лише на полях, але не на локальних змінних. Поле для читання може бути ініціалізовано або під час декларування, або всередині конструктора того ж класу, тому значення можуть бути різними для різних виконань програми залежно від використовуваного конструктора. Ключове слово readonly вказує, що змінна екземпляра об'єкта не піддається зміні, і будь-яка спроба змінити її після оголошення призводить до помилки компіляції. Змінна не стає незмінною до завершення. Змінні створюються лише для читання, щоб зупинити виклик коду від випадкового його зміни після його побудови.
Ключове слово Constant (const) - це не що інше, як незмінні змінні, значення яких можна ініціалізувати лише під час компіляції. Ці постійні значення також називають буквальними. Це просто дозволяє нам вказати, чи змінна може змінюватися чи ні. Простіше кажучи, константи неявно статичні, і їх слід ініціалізувати перед тим, як їх використовувати в програмі. Ключове слово Readonly, з іншого боку, є модифікатором, який можна використовувати в полях, значення яких можна змінювати під час виконання. Це запобігає зміні полів і значення яких можна встановити за допомогою контрольних змінних.
Const є статичним за замовчуванням, і значення, які повинні бути призначені під час оголошення змінної, тобто значення призначаються лише під час компіляції. Константа оголошується за допомогою ключового слова "const". Ініціалізація постійного поля повинна бути постійним виразом і не може змінюватися. Простіше кажучи, const - константа часу компіляції. Поле для читання, з іншого боку, може бути ініціалізовано лише на рівні класу, не в методі, і поле не може бути змінено після ініціалізації. Іншими словами, змінні, що читаються тільки, можуть бути ініціалізовані під час оголошення або всередині конструктора.
Значення const вводиться безпосередньо в код, оскільки воно виступає в якості заміни часу компіляції. Компілятор розміщує постійне значення в метаданих збірки, яке визначає константу і вбудовує значення в сам код IL після ініціалізації, тому для констант під час виконання розподілу не потрібно пам'яті. Значення Readonly не є постійним, і воно зберігається в купі завантажувача пам'яті, для якої не можна виділити, поки не буде завантажений його тип. Поля для читання тільки зберігаються в динамічній пам'яті, тому значення можна отримувати лише під час виконання.
Хоча обидва ключові слова використовуються майже з однаковою метою, вони мають різну семантику бінарних версій. Коли вираз посилається на константу, компілятор вкладає значення під час компіляції. Отже, якщо значення використовується в іншій збірці, оригінальну збірку потрібно оновити і значення слід змінити. Зміни в збірці не відображаються, поки вона не буде перекомпільована. Значення не отримується до часу виконання, коли вираз посилається на поле для читання. Якщо значення змінюється в іншій збірці, зміни відображаються в збірці, як тільки він завантажується, не потрібно перекомпілювати його.
Обидва ключові слова використовуються для однієї і тієї ж речі, яка полягає в оголошенні члена, щоб значення не могли бути змінені протягом усієї програми. Однак ключове слово const сильно відрізняється від ключового слова readonly. Const є постійною змінною, значення якої слід ініціалізувати під час компіляції, тоді як поле для читання лише може бути ініціалізовано лише на рівні класу, або під час оголошення або всередині конструктора. Const - константа часу компіляції, тоді як поля лише для читання - лише для читання. До змінних Констанції можна отримати доступ за допомогою "Classname.VariableName", тоді як до змінних лише для читання можна отримати доступ за допомогою "InstanceName.VariableName". Крім того, змінні const можуть бути оголошені у методах, тоді як поля, які читаються тільки не можуть бути оголошені у методах.