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


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

Вы используете const ключевое слово для объявления поля константы или локальной константы. Константные поля и локальные не являются переменными и не могут быть изменены. Константы могут быть числами, логическими значениями, строками или нулевыми ссылками. Не создавайте константу для предоставления сведений, которые могут измениться в любое время. Например, не используйте константное поле для хранения цены услуги, номера версии продукта или торгового названия компании. Эти значения могут со временем измениться, а поскольку константы распространяются компиляторами, для отражения изменений потребуется повторная компиляция остальных кодов, скомпилированных с использованием ваших библиотек. См. также описание ключевого слова readonly. Например:

const int X = 0;
public const double GravitationalConstant = 6.673e-11;
private const string ProductName = "Visual C#";

Начиная с C# 10, интерполированные строки могут быть константами, если все используемые выражения также являются константными строками. Эта функция может улучшить код, создающий константные строки:

const string Language = "C#";
const string Platform = ".NET";
const string FullProductName = $"{Platform} - Language: {Language}";

Замечания

Тип объявления константы указывает на тип членов, которые вводятся объявлением. Инициализатор локальной константы или поля константы должен быть константным выражением, которое может быть неявно преобразовано в целевой тип.

Выражение константы — это выражение, которое можно полностью вычислить во время компиляции. Таким образом, единственными возможными значениями для констант ссылочных типов являются строки и null-ссылка.

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

public const double X = 1.0, Y = 2.0, Z = 3.0;

Модификатор static в объявлении константы не допускается.

Константа может участвовать в выражении константы следующим образом:

public const int C1 = 5;
public const int C2 = C1 + 100;

Примечание.

Ключевое слово readonly отличается от ключевого слова const. Поле const может быть инициализировано только при объявлении поля. Поле readonly может быть инициализировано при объявлении или в конструкторе. Таким образом, поля readonly могут иметь разные значения в зависимости от использованного конструктора. Также, несмотря на то, что поле const является константой во время компиляции, поле readonly можно использовать для констант во время выполнения, как в следующей строке: public static readonly uint l1 = (uint)DateTime.Now.Ticks;

Примеры

public class ConstTest
{
    class SampleClass
    {
        public int x;
        public int y;
        public const int C1 = 5;
        public const int C2 = C1 + 5;

        public SampleClass(int p1, int p2)
        {
            x = p1;
            y = p2;
        }
    }

    static void Main()
    {
        var mC = new SampleClass(11, 22);
        Console.WriteLine($"x = {mC.x}, y = {mC.y}");
        Console.WriteLine($"C1 = {SampleClass.C1}, C2 = {SampleClass.C2}");
    }
}
/* Output
    x = 11, y = 22
    C1 = 5, C2 = 10
*/

В следующем примере показано, как объявить локальную константу:

public class SealedTest
{
    static void Main()
    {
        const int C = 707;
        Console.WriteLine($"My local constant = {C}");
    }
}
// Output: My local constant = 707

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

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

См. также