Программирование

вторник, 25 сентября 2012 г.

Сравнение: const vs readonly

Таблица различий между полем-константой и полем только-для-чтения в C#
Аспект const readonly
Место инициализации Только при объявлении поля. При объявлении поля, в конструкторах экземпляра, в статическом конструкторе.
Время инициализация При компиляции. При создании экземпляра класса или при обращении к статическим членам класса.
Поддерживаемые типы Boolean, Char, Byte, SByte, Intl6, UIntl6, Int32, UInt32, Int64, UInt64, Single, Double, Decimal, String и enum. Использовать ссылочные типы как константы не имеет смысла, т. к. единственное допустимое начальное значение таких констант — null. Исключение — тип String. Любой тип.
Способ хранения Хранится в метаданных сборки. Везде, где встречается константа, компилятор вставляет вместо неё само значение. В период выполнения память для неё не выделяется. Хранится как обычное (instance) поле с выделением памяти в период выполнения.
Разделение между сборками Везде, где встречается константа, определённая в другой сборке, компилятор вставляет вместо неё само значение из сборки. После компиляции, сборка с константой более не требуется для выполнения приложения (при условии, что используется только константа). Если константа будет изменена, то для использования нового значения в других сборках потребуется их перекомпиляция. Разделяется как обычное поле. Сборка с reaonly полем должна присутствовать в списке ссылок у сборок-клиентов.

Источники

  1. http://msdn.microsoft.com/ru-ru/library/acdd6hb7.aspx.
  2. Дж. Рихтер. CLR via C#. Программирование на платформе Microsoft .NET Framework 4.0 на языке C#. – С. 191.

Комментариев нет:

Отправить комментарий