Поделиться через


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

Константы — это постоянные значения, которые известны во время компиляции и не изменяются во время выполнения программы. Константы должны объявляться с модификатором const. Только встроенные типы C# могут быть объявлены как const. Константы ссылочного типа, отличные от того, String которые могут быть инициализированы только с значением NULL . Пользовательские типы, включая классы, структуры и массивы, не могут объявляться как const. Модификатор readonly позволяет создать класс, структуру или массив, которые инициализируются один раз (например, в конструкторе), и впоследствии изменить их нельзя.

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

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

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

class Calendar1
{
    public const int Months = 12;
}

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

Примечание.

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

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

class Calendar2
{
    public const int Months = 12, Weeks = 52, Days = 365;
}

Выражение, которое используется для инициализации константы, может ссылаться на другую константу, если не создает циклическую ссылку. Например:

class Calendar3
{
    public const int Months = 12;
    public const int Weeks = 52;
    public const int Days = 365;

    public const double DaysPerWeek = (double) Days / (double) Weeks;
    public const double DaysPerMonth = (double) Days / (double) Months;
}

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

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

int birthstones = Calendar.Months;

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

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

См. также