Разница между const и readonly в C#

В C# ключевые слова const и readonly используются для объявления неизменяемых значений, но между ними есть важные различия.

const

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

Особенности const:

  • Должно быть инициализировано при объявлении.
  • Компилятор заменяет использование const его значением в коде.
  • Поддерживает только примитивные типы, строки и enum.
  • Нельзя использовать нестатические поля или методы для инициализации.

Пример использования const:

class MathConstants
{
    public const double Pi = 3.14159;
}

readonly

readonly — это модификатор для полей, который позволяет инициализировать их только в момент объявления или в конструкторе класса.

Особенности readonly:

  • Может быть инициализировано в момент объявления или в конструкторе.
  • Значение можно задать динамически во время выполнения.
  • Поддерживает ссылочные типы и структуры.
  • Используется для создания неизменяемых объектов, значение которых известно только во время выполнения.

Пример использования readonly:

class Config
{
    public readonly int MaxConnections;
    
    public Config(int maxConnections)
    {
        MaxConnections = maxConnections;
    }
}

Когда использовать

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