Разница между константой и ReadOnly

Важно понять концепции программирования на C #, прежде чем приступить к реализации кода. Прежде чем мы перейдем к различиям между const и readonly, давайте сначала разберемся с ключевыми словами и тем, как они используются в программе. Оба являются наиболее распространенными ключевыми словами, используемыми в программировании на C #, и в основном для той же цели. Однако оба ключевых слова сильно отличаются друг от друга. Const - это зарезервированное слово, используемое для представления константных значений, и оно указывает, что значение не может быть изменено после времени компиляции, тогда как readonly - это модификатор, который можно использовать в полях, значение которого можно изменить во время выполнения. Давайте посмотрим на некоторые ключевые различия между const и readonly.

Что такое Const?

Const относится к постоянной переменной, значение которой необходимо назначить только один раз, во время объявления. Когда ключевое слово const используется во время объявления, оно становится постоянным, то есть значение остается постоянным и не может быть изменено во всей программе. Это больше зарезервированное слово, которое указывает, что значение не должно быть изменено после компиляции. Const по умолчанию неявно статичен, поэтому его можно вызывать с именем класса, используя «Classname.VariableName». Постоянные значения также называются литералами. Это может быть любой базовый тип данных, такой как целочисленный констант, плавающий констант или строковый литерал.

Что такое ReadOnly?

Ключевое слово Readonly - это модификатор, который можно использовать только для полей, но не для локальных переменных. Поле только для чтения может быть инициализировано либо во время объявления, либо внутри конструктора в одном и том же классе, поэтому значения могут отличаться для разных исполнений программы в зависимости от используемого конструктора. Ключевое слово readonly указывает, что переменная экземпляра объекта не может быть изменена, и любая попытка изменить ее после объявления приводит к ошибке компиляции. Переменная не становится неизменяемой до тех пор, пока не выполнится. Переменные создаются только для чтения, чтобы прекратить вызывать код из-за его случайного изменения после его создания..

Разница между константой и ReadOnly

  1. основной

Ключевое слово constant (const) - не что иное, как неизменяемые переменные, значение которых может быть инициализировано только во время компиляции. Эти постоянные значения также называются литералами. Это просто позволяет нам указать, является ли переменная модифицируемой или нет. Проще говоря, константы неявно являются статическими, и их следует инициализировать перед использованием в программе. Ключевое слово Readonly, с другой стороны, является модификатором, который можно использовать в полях, значение которого можно изменить во время выполнения. Это предотвращает изменение полей и значения которых могут быть установлены через ссылочные переменные.

  1. инициализация

По умолчанию const является статическим, и значения, для которых должны быть назначены во время объявления переменной, означают, что значения назначаются только во время компиляции. Константа объявляется с использованием ключевого слова «const». Инициализация константного поля должна быть константным выражением и не может быть изменена. Проще говоря, const - это константа времени компиляции. Поле только для чтения, с другой стороны, может быть инициализировано только на уровне класса, а не внутри метода, и поле не может быть изменено после инициализации. Другими словами, переменные только для чтения могут быть инициализированы во время объявления или внутри конструктора..

  1. Выделение памяти

Значение const вставляется непосредственно в код, поскольку оно действует как замена во время компиляции. Компилятор помещает значение константы в метаданные сборки, которая определяет константу, и встраивает значение в сам код IL после инициализации, поэтому для выделения констант во время выполнения не требуется. Значение только для чтения не является постоянным, и оно сохраняется в куче загрузчика, память для которой не может быть выделена, пока не загружен его тип. Поля только для чтения хранятся в динамической памяти, поэтому значения могут быть получены только во время выполнения.

  1. Бинарное управление версиями

Хотя оба ключевых слова используются почти для одной и той же цели, они имеют разную семантику бинарного управления версиями. Когда выражение ссылается на константу, компилятор встраивает значение во время компиляции. Поэтому, если значение используется в другой сборке, необходимо обновить исходную сборку и изменить значение. Изменения в сборке не отражаются, пока не будут перекомпилированы. Значение не будет получено до тех пор, пока выражение не обратится к полю, доступному только для чтения. Если значение изменяется в другой сборке, изменения отражаются в сборке, как только она загружается без необходимости перекомпиляции.

Const vs. Readonly: Сравнительная таблица

Резюме Const против Readonly

Оба ключевых слова используются для одного и того же, то есть для объявления члена, чтобы значения не могли быть изменены во всей программе. Однако ключевое слово const очень отличается от ключевого слова readonly. Const - это постоянная переменная, значение которой должно быть инициализировано во время компиляции, тогда как поле только для чтения может быть инициализировано только на уровне класса, либо во время объявления, либо внутри конструктора. Const является константой времени компиляции, тогда как поля только для чтения доступны только для чтения. К переменным константы можно получить доступ, используя «Classname.VariableName», в то время как переменные только для чтения можно получить, используя «InstanceName.VariableName». Более того, переменные const могут быть объявлены в методах, тогда как поля только для чтения не могут быть объявлены в методах.