Таблица различий между полем-константой и полем только-для-чтения в C#
Аспект
|
const
|
readonly
|
Место инициализации
|
Только при объявлении поля.
|
При объявлении поля, в конструкторах экземпляра, в статическом конструкторе.
|
Время инициализация
|
При компиляции.
|
При создании экземпляра класса или при обращении к статическим членам класса.
|
Поддерживаемые типы
|
Boolean, Char, Byte, SByte, Intl6, UIntl6, Int32, UInt32, Int64, UInt64, Single, Double, Decimal, String и enum. Использовать ссылочные типы как константы не имеет смысла, т. к. единственное допустимое начальное значение таких констант — null. Исключение — тип String.
|
Любой тип.
|
Способ хранения
|
Хранится в метаданных сборки. Везде, где встречается константа, компилятор вставляет вместо неё само значение. В период выполнения память для неё не выделяется.
|
Хранится как обычное (instance) поле с выделением памяти в период выполнения.
|
Разделение между сборками
|
Везде, где встречается константа, определённая в другой сборке, компилятор вставляет вместо неё само значение из сборки. После компиляции, сборка с константой более не требуется для выполнения приложения (при условии, что используется только константа). Если константа будет изменена, то для использования нового значения в других сборках потребуется их перекомпиляция.
|
Разделяется как обычное поле. Сборка с reaonly полем должна присутствовать в списке ссылок у сборок-клиентов.
|
Источники
-
http://msdn.microsoft.com/ru-ru/library/acdd6hb7.aspx.
-
Дж. Рихтер. CLR via C#. Программирование на платформе Microsoft .NET Framework 4.0 на языке C#. – С. 191.
Комментариев нет:
Отправить комментарий