Looking for c# Keywords? Try Ask4Keywords

C# Language Const


пример

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

Например, поскольку скорость света никогда не изменится, мы можем сохранить его в константе.

const double c = 299792458;  // Speed of light

double CalculateEnergy(double mass)
{
    return mass * c * c;
}

Это по существу то же самое, что и return mass * 299792458 * 299792458 , поскольку компилятор будет напрямую подставлять c своим постоянным значением.

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

const double c = 299792458;  // Speed of light 

c = 500;  //compile-time error

Константа может иметь префикс с теми же модификаторами доступа, что и методы:

private const double c = 299792458;
public const double c = 299792458;
internal const double c = 299792458;

const элементы static по своей природе. Однако использование static явно запрещено.

Вы также можете определить методы-локальные константы:

double CalculateEnergy(double mass)
{
    const c = 299792458;
    return mass * c * c;
}

Они не могут иметь префикса с private или public ключевым словом, поскольку они неявно локальны для метода, в котором они определены.


Не все типы могут использоваться в объявлении const . Допустимыми типами значений являются предопределенные типы sbyte , byte , short , ushort , int , uint , long , ulong , char , float , double , decimal , bool и все типы enum . Пытаться объявить const члены с другими типами значений (например, TimeSpan или Guid ) не удастся во время компиляции.

Для специальной заданной string ссылочного типа константы могут быть объявлены с любым значением. Для всех других ссылочных типов константы могут быть объявлены, но всегда должны иметь значение null .


Поскольку значения const известны во время компиляции, они разрешены как ярлыки case в инструкции switch , в качестве стандартных аргументов для необязательных параметров, в качестве аргументов спецификаций атрибутов и т. Д.


Если значения const используются для разных сборок, следует соблюдать осторожность при управлении версиями. Например, если сборка А определяет public const int MaxRetries = 3; , а сборка B использует эту константу, то, если значение MaxRetries позже будет изменено на 5 в сборке A (которое затем будет скомпилировано), это изменение не будет эффективным в сборке B, если сборка B также не будет скомпилирована (с ссылка на новую версию A).

По этой причине, если значение может измениться в будущих версиях программы, и если значение должно быть общедоступным, не объявляйте это значение const если не знаете, что все зависимые сборки будут перекомпилированы всякий раз, когда что-то изменится. Альтернативой является использование static readonly вместо const , которое разрешено во время выполнения.