День сто шестнадцатый. #ВопросыНаСобеседовании

Самые часто задаваемые вопросы на собеседовании по C#

6. В чем разница между константой и полем только для чтения в C#?

Поле сonst - это константа, переменная, значение которой является постоянным со времени компиляции. Присваивать значение константе обязательно. По умолчанию поле const является статическим, и мы не можем изменить значение переменной const при выполнении программы.

Поле readonly - это поле, значение которого мы можем изменить или назначить во время выполнения, но только через нестатический конструктор.

Например, у нас есть тестовый класс, в котором у нас две переменные: одна только для чтения, а другая - константа.

class Test {

readonly int readOnly = 10;

const int cons = 10;

public Test() {

read = 100;

//cons = 100;

}

public void Check() {

Console.WriteLine("Read only: {0}", readOnly);

Console.WriteLine("Const: {0}", cons);

}

}

При попытке изменить значение константы в конструкторе возникает исключение "The left-hand side of an assignment must be a variable, property or indexer" ("Левая часть оператора присваивания должна быть переменной, свойством или индексатором").

Если мы создадим экземпляр класса Test и вызовем метод Check(), мы получим следующий вывод:

Read only: 100

Const: 10



При компиляции значения const записываются непосредственно вместо вызывающего константу кода. В предыдущем примере все обращения к cons при компиляции будут заменены на 10. Это может иметь как преимущества, так и недостатки. Код работает гораздо быстрее, так как избегает лишнего вызова, но. Если вам нужно изменить значение константы, вам нужно перекомпилировать все сборки, обращающиеся к ней. Поэтому в общем случае, если к константе обращаются другие сборки, предпочтительнее использовать поле readonly. Также константа бесполезна, если значение выбирается во время выполнения, например, из файла конфигурации.



Источник: https://www.c-sharpcorner.com