Что такое константа в C#?

«Что такое константа в C#?» — вопрос из категории C# Core, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Константа (const) — это идентификатор, значение которого известно на этапе компиляции и не может быть изменено в течение всего времени жизни приложения.

Характеристики и синтаксис:

public const int MaxRetryCount = 3;
public const string ProductName = "MyApp";
public const double Pi = 3.14159;

Ключевые особенности const:

  1. Компиляция: Значение подставляется прямо в IL-код везде, где используется константа. Изменение константы требует перекомпиляции всех зависимых сборок.
  2. Типы данных: Могут быть только типами-значениями (int, double, bool, enum), string или null.
  3. Область видимости: Неявно являются static. Обращение: ClassName.ConstantName.
  4. Инициализация: Должны быть проинициализированы при объявлении.

Когда использовать const? Для истинно неизменяемых, фундаментальных значений, известных на этапе компиляции:

  • Математические константы (Math.PI — на самом деле static readonly, но концептуально).
  • Коды ошибок, магические числа.
  • Фиксированные строки-идентификаторы.

Альтернатива: readonly поле Используйте readonly, когда значение неизменно, но вычисляется в runtime (например, при создании объекта) или имеет недопустимый для const тип.

public class Config
{
    // Значение можно задать в конструкторе или инициализаторе
    public readonly DateTime StartupTime = DateTime.UtcNow;
    public readonly List<string> SupportedLanguages;

    public Config()
    {
        SupportedLanguages = LoadLanguages(); // runtime-инициализация
    }
}
Сравнение const vs readonly: Критерий const readonly
Время вычисления Компиляция Выполнение (runtime)
Типы данных Примитивы, string, enum Любые
Модификатор static Неявно статическая Может быть как статическим, так и экземплярным
Обновление значения Требует перекомпиляции всех клиентов Достаточно перекомпиляции только сборки, где объявлено поле