Константы (руководство по программированию на C#)

Обновлен: Ноябрь 2007

Константы представляют собой неизменные значения, известные во время компиляции и неизменяемые на протяжении времени существования программы. Константы объявляются с модификатором const. Только встроенные типы C# (за исключением System.Object) могут быть объявлены как const. Список встроенных типов см. в разделе Таблица встроенных типов (Справочник по C#). Определяемые пользователем типы, включая классы, структуры и массивы, не могут быть const. Для создания класса, структуры или массива, которые инициализируются один раз во время выполнения (например, в конструкторе) и после этого не могут быть изменены, используется модификатор readonly.

Язык C# не поддерживает методы, свойства и события с ключевым словом const.

Тип перечисления позволяет определять именованные константы для целочисленных встроенных типов (например, int, uint, long и т. д.). Дополнительные сведения см. в разделе Enum (Справочник по C#).

Константы должны инициализировать сразу после объявления. Пример.

class Calendar1
{
    public const int months = 12;
}

В этом примере константа months всегда имеет значение 12, и ее значение не может быть изменено даже самим классом. Когда компилятор встречает идентификатор константы в исходном коде C# (например, months), он подставляет литеральное значение непосредственно в его создающий код IL. Поскольку адрес переменной, связанный с константой во время выполнения, отсутствует, поля const не могут быть переданы по ссылке и отображены как значение l-value в выражении.

ms173119.alert_note(ru-ru,VS.90).gifПримечание.

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

Несколько констант одного типа можно объявить одновременно, например:

class Calendar2
{
    const int months = 12, weeks = 52, days = 365;
}

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

class Calendar3
{
    const int months = 12;
    const int weeks = 52;
    const int days = 365;

    const double daysPerWeek = (double) days / (double) weeks;
    const double daysPerMonth = (double) days / (double) months;
}

Константы могут быть отмечены модификаторами public, private, protected, internal или protectedinternal. Эти модификаторы доступа определяют порядок доступа к константе для пользователей класса. Дополнительные сведения см. в разделе Модификаторы доступа (Руководство по программированию в C#).

Доступ к константам осуществляется так, как если бы они были статическими полями, поскольку значение константы одинаково для всех экземпляров типа. Для их объявления не нужно использовать ключевое слово static. В выражениях, которые не входят в класс, в котором определена константа, для доступа к ней необходимо использовать имя класса, точку и имя этой константы. Например:

int birthstones = Calendar.months;

Спецификация языка C#

Дополнительные сведения см. в следующем разделе документа Спецификация языка C#:

  • 10.4 Константы

См. также

Основные понятия

Руководство по программированию в C#

Ссылки

Классы и структуры (Руководство по программированию в C#)

Свойства (руководство по программированию в C#)

Типы (руководство по программированию в C#)

readonly (Справочник по C#)

Другие ресурсы

Неизменность в C#. Часть первая. Виды неизменности