#c_sharp #типы_данных
Имею следующий код static void Main(string[] args) { string value = "value1"; // switch с const переменными работает switch(value) { case ConstVariable.VALUE1: Console.WriteLine(ConstVariable.VALUE1); break; case ConstVariable.VALUE2: Console.WriteLine(ConstVariable.VALUE2); break; case ConstVariable.VALUE3: Console.WriteLine(ConstVariable.VALUE3); break; } // ЗДЕСЬ ОШИБКА!!! switch c readonly переменными не работает switch (value) { case ReadOnlyVariable.VALUE1: Console.WriteLine(ConstVariable.VALUE1); break; case ReadOnlyVariable.VALUE2: Console.WriteLine(ConstVariable.VALUE2); break; case ReadOnlyVariable.VALUE3: Console.WriteLine(ConstVariable.VALUE3); break; } } static class ReadOnlyVariable { public static readonly string VALUE1 = "value1"; public static readonly string VALUE2 = "value2"; public static readonly string VALUE3 = "value3"; } static class ConstVariable { public const string VALUE1 = "value1"; public const string VALUE2 = "value2"; public const string VALUE3 = "value3"; } В блоке switch я могу использовать переменные const, но если я использую переменны readonly, то получаю ошибку A constant value is expected Почему так, разве переменные readonly на этапе компиляции не определяются?
Ответы
Ответ 1
readonly значит, что поле должно быть инициализировано в конструкторе и последующая модификация данного поля запрещена. Т.е. это гарантия того, что раз поле проинициализировано в конструкторе, оно больше не может быть изменено в других частях класса. Но это не делает его сущностью времени компиляции — нет, оно защищено от переинициализации, но не является константным. Подробнее в документации
Комментариев нет:
Отправить комментарий