Sobes.tech
Junior
129
questionbank

В чем разница между ReadOnly и const в C#?

Answer from AI

sobes.tech AI

Характеристика const readonly
Время инициализации Во время компиляции. Значение должно быть известно на этапе компиляции. Во время выполнения. Может быть установлено в конструкторе или при объявлении.
Типы данных Только примитивные типы, string, enum. Любые типы данных.
Область видимости Только статическое поле. Может быть полем экземпляра (не статическим) или статическим полем.
Возможность изменения Нельзя изменить после инициализации. Нельзя изменить после завершения конструктора (для полей экземпляра) или после первого обращения (для статических полей).
public class MyClass
{
    const int CompileTimeConstant = 10; // Значение должно быть известно на этапе компиляции.
    readonly int RuntimeConstant; // Может быть установлено в конструкторе.
    static readonly int StaticRuntimeConstant; // Может быть установлено в статическом конструкторе.

    public MyClass(int value)
    {
        RuntimeConstant = value; // Инициализация в конструкторе экземпляра.
    }

    static MyClass()
    {
        StaticRuntimeConstant = DateTime.Now.Year; // Инициализация в статическом конструкторе.
    }

    public void PrintValues()
    {
        Console.WriteLine($"CompileTimeConstant: {CompileTimeConstant}");
        Console.WriteLine($"RuntimeConstant: {RuntimeConstant}");
        Console.WriteLine($"StaticRuntimeConstant: {StaticRuntimeConstant}");
    }

    public static void SomeStaticMethod()
    {
        //CompileTimeConstant = 20; // Ошибка компиляции: нельзя изменить const.
        //StaticRuntimeConstant = 2023; // Ошибка компиляции: нельзя изменить static readonly после инициализации.
    }
}