День сто шестнадцатый. #ВопросыНаСобеседовании
Самые часто задаваемые вопросы на собеседовании по C#
6. В чем разница между константой и полем только для чтения в C#?
Поле
Поле
Например, у нас есть тестовый класс, в котором у нас две переменные: одна только для чтения, а другая - константа.
Если мы создадим экземпляр класса
Источник: https://www.c-sharpcorner.com
Самые часто задаваемые вопросы на собеседовании по 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 записываются непосредственно вместо вызывающего константу кода. В предыдущем примере все обращения к cons при компиляции будут заменены на 10. Это может иметь как преимущества, так и недостатки. Код работает гораздо быстрее, так как избегает лишнего вызова, но. Если вам нужно изменить значение константы, вам нужно перекомпилировать все сборки, обращающиеся к ней. Поэтому в общем случае, если к константе обращаются другие сборки, предпочтительнее использовать поле
Const: 10
readonly
. Также константа бесполезна, если значение выбирается во время выполнения, например, из файла конфигурации.Источник: https://www.c-sharpcorner.com