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 после инициализации.
}
}