Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Константы — это неизменяемые значения, известные во время компиляции и не изменяющиеся для жизни программы. Константы объявляются с модификатором констант . Только встроенные типы C# могут быть объявлены как const
. Константы ссылочного типа, кроме String, могут быть инициализированы только значением null. Определяемые пользователем типы, включая классы, структуры и массивы, не могут быть const
. Используйте модификатор только для чтения для создания класса, структуры или массива, который инициализируется один раз в момент выполнения (например, в конструкторе) и после этого не может быть изменен.
C# не поддерживает const
методы, свойства или события.
Тип перечисления позволяет определять именованные константы для целых встроенных типов (например, int
, uint
, long
и т. д.). Для получения дополнительной информации см. enum.
Константы должны быть инициализированы по мере их объявления. Рассмотрим пример.
class Calendar1
{
public const int Months = 12;
}
В этом примере константой Months
всегда является 12, и она не может быть изменена даже самим классом. На самом деле, когда компилятор обнаруживает постоянный идентификатор в исходном коде C# (например, Months
), он заменяет литеральное значение непосредственно на код промежуточного языка (IL), который он создает. Так как во время выполнения нет адреса переменной, связанного с константой, const
поля не могут передаваться по ссылке и не могут отображаться как l-значение в выражении.
Замечание
Будьте осторожны, когда вы ссылаетесь на константные значения, определенные в другом коде, таких как 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;
}
Константы можно пометить как общедоступные, частные, защищенные, внутренние, защищенные внутренние или закрытые. Эти модификаторы доступа определяют, как пользователи класса могут получить доступ к константе. Дополнительные сведения см. в статье Модификаторы доступа.
Доступ к константам осуществляется так, как если бы они были статическими полями, так как значение константы совпадает со всеми экземплярами типа. Вы не используете ключевое static
слово для их объявления. Выражения, которые не находятся в классе, определяющем константу, должны использовать имя класса, период и имя константы для доступа к константе. Рассмотрим пример.
int birthstones = Calendar.Months;
Спецификация языка C#
Дополнительные сведения см. в спецификации языка C#. Спецификация языка является авторитетным источником синтаксиса и использования языка C#.