Локальные константы

Локальные константы (Local Constants)

Локальные константы во многом похожи на локальные переменные, но есть важное отличие: после инициализации значение константы изменять нельзя.

Как и локальные переменные, константы объявляются внутри блока кода.

У констант два ключевых свойства:

  1. При объявлении требуется обязательно задать начальное значение;
  2. После объявления изменять значение запрещено.

Базовый синтаксис констант

const Тип ИмяКонстанты = НачальноеЗначение;

// const: ключевое слово, пишется сразу перед типом данных
// = НачальноеЗначение: обязательная часть, пропускать нельзя
Code language: JavaScript (javascript)

Пояснение правил синтаксиса

По сравнению с обычным объявлением полей или переменных есть два различия:

  1. Перед типом данных добавляется ключевое слово const;
  2. Нужно указать начальное значение, и это значение должно быть определено на этапе компиляции:
    • Чаще всего литералы базовых типов или выражения из базовых типов;
    • Допускается присвоить значение null;
    • Нельзя присваивать ссылки на экземпляры объектов (ссылки на объекты определяются во время выполнения, это не соответствует требованиям константы времени компиляции).

class Program
{
    static void Main()
    {
        int a = 10; // это переменная

        const int b = 20; // это константа, внешне похожа на переменную
                          // ключевое слово const указывает, что это константа

        a = 100; // переменную можно перезаписывать
        a = 200; // изменять можно сколько угодно раз

        // Ошибка
        b = 300; // константу изменить нельзя, компилятор выдаст ошибку

        // Использование констант улучшает читаемость и поддерживаемость кода

        
        int c; // объявление переменной
        c = 12; // для переменной допустимо разделять объявление и присваивание

        // Для констант разделять объявление и инициализацию запрещено
        // Ошибка
        const double d; // только объявление
        d = 3.14; // работает для переменных, но не для констант
    }
}Code language: C# (cs)

Эти две ошибки имеют разные причины: первая попытка изменить значение константы, вторая разделяет объявление и инициализацию. Для констант оба действия должны выполняться одновременно.

Можно ли использовать объект класса как константу?

Выражение, присваиваемое константе phone, должно быть константой времени компиляции.

new Phone() выделяет память в куче и создаёт объект во время работы программы, это значение времени выполнения.

В C# запрещено присваивать ссылки на объекты, созданные во время выполнения, локальным константам const. Это приводит к ошибке компиляции CS0133.

class Program
{
    static void Main()
    {
        const Phone phone = new Phone();
    }
}

class Phone
{

}Code language: C# (cs)

Дополнительное пояснение по ключевому слову

const не является модификатором, это неотъемлемая часть синтаксиса объявления, записывается напрямую перед типом данных.

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

Правила области видимости и пример

Правила области видимости локальных констант полностью совпадают с правилами для локальных переменных: если константа объявлена внутри метода или блока кода, она перестаёт существовать после завершения работы этого блока.

void ShowArea()
{
    const double PI = 3.1416; // объявляем локальную константу PI
    for (int radius = 1; radius <= 5; radius++) // вывод площади кругов с радиусом от 1 до 5
    {
        double area = radius * radius * PI; // считываем значение константы PI
        Console.WriteLine($"Радиус: {radius}, Площадь: {area}");
    }
}
Code language: C# (cs)

Константа PI доступна только внутри метода ShowArea и удаляется после завершения его работы.


class Program
{
    static void Main()
    {
        ShowArea();
    }

    static void ShowArea()
    {
        const double PI = 3.1416; 
        for (int radius = 1; radius <= 5; radius++) 
        {
            double area = radius * radius * PI;
            Console.WriteLine($"Radius: {radius}, Area: {area}");
        }
    }

}
Code language: C# (cs)
Область видимости константы PI (красная зона). Как и у переменных, границы задаются фигурными скобками {} родительского блока, родительский блок для PI — тело метода.

Локальные константы

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *