День 1163. #ЗаметкиНаПолях
Const, Readonly и Static Readonly в C#
Static, Readonly и Const — наиболее распространенные ключевые слова, используемые для объявления переменных. Рассмотрим их сходства и различия на примерах.
1. Константы
Значение const определяется во время компиляции. Основная особенность в том, что константа должна иметь значение при объявлении. Поэтому только примитивные типы (int, string, double и т.п.) можно использовать в качестве констант. Кроме того, константы по умолчанию являются статическими, т.е. не нужно использовать экземпляр класса для доступа к открытой константе.
public class Constant
{
public const string myVar = "Constant";
}
Console.WriteLine(Constant.myVar);
Когда использовать
Для значений примитивных типов, которые никогда не изменятся. При компиляции все использования константы заменяются её значением, поэтому если изменить значение константы, то придётся перекомпилировать все сборки, где она используется.
2. Readonly
Ключевое слово readonly означает, что переменной может быть присвоено значение во время выполнения либо при инициализации, либо через нестатический конструктор.
public class Readonly
{
public readonly string var1 = "Readonly1";
public readonly string var2;
public Readonly()
{
var2= "Readonly2";
}
}
var obj = new Readonly();
Console.WriteLine(obj.var2);
Ключевое слово readonly позволяет инициализировать переменную либо во время компиляции, либо во время выполнения, тогда как const инициализируется во время компиляции. Кроме того, мы должны использовать экземпляр класса для доступа к переменной только для чтения.
Когда использовать
Когда нужно инициализировать переменную во время построения класса, а затем она никогда не будет изменена.
3. Static Readonly
Ключевое слово static используется для объявления статических членов. Значение переменной static readonly может быть присвоено во время выполнения либо при инициализации, либо через статический конструктор.
public class StaticReadonly
{
public static readonly string var1 = "First";
public static readonly string var2;
static StaticReadonly()
{
var2 = "Second";
}
}
Console.WriteLine(StaticReadonly.var2);
Когда использовать
Статические переменные только для чтения похожи на константы. Отличие в том, что, если значение будет изменено, изменения будут видны во всех сборках, где оно используется, без необходимости их перекомпиляции.
Источник: enlear.academy/const-v…20aa0b57