Наследование readonly поля - C#
Формулировка задачи:
Здравствуй, киберфорум. Изучаю C# и .NET с помощью книги Эндрю Троеллсена. Дошёл до полей, доступных только для чтения, и решил попробовать создать дочерний класс от базового, содержащего данное поле. В коде будет понятнее, я думаю. Это базовый класс, тут всё прекрасно и работает. Далее наследую :
И тут вылезает ошибка: Ошибка CS0191 Присваивание значений доступному только для чтения полю допускается только в конструкторе и в инициализаторе переменных.
Что я делаю не так? Ошибку в MSDN гуглил, там ничего про наследование не говорится, а в базовом классе у меня и так работает всё. Здесь же не позволяет в конструкторе перезаписать, хотя по описанию ошибки именно тут должно быть всё сделано, именно в конструкторе. Пробовал добавить this.maxSpeed, результата нет. Не может же readonly как-то иначе наследоваться. Для теста попробовал вызвать следующий код:
вывод гласит: машина едет 50, максимальная скорость машины 180, максимальная скорость вана 35, скорость вана 20.
Из полученного делаю вывод, что поле readonly нормально присвоилось в соответствующем конструкторе базового класса и стало равно 180, а вот наследовалось в miniWan с значением 35, которое описано в стандартном конструкторе базового класса. Как, почему, зачем именно оттуда, и как же всё таки в итоге в miniWan мне переопределить значение для данного поля?
class Car { public readonly int maxSpeed; private int currSpeed; public Car(int max) { maxSpeed = max; } public Car() { maxSpeed = 35; } //дальше другие методы, свойства класса
class MiniWan : Car { public MiniWan() { maxSpeed = 35; Speed = 40; } }
Car myCar = new Car(180); myCar.Speed = 50; Console.WriteLine("My car is going {0}", myCar.Speed); Console.WriteLine("What is max speed of my car? {0}", myCar.maxSpeed); MiniWan myWan = new MiniWan(); myWan.Speed = 20; Console.WriteLine("What is max speed of my wan? {0}", myWan.maxSpeed); Console.WriteLine("Speed of my wan is {0}", myWan.Speed);
Решение задачи: «Наследование readonly поля»
textual
Листинг программы
class deluxeMiniWan : MiniWan { public deluxeMiniWan() :base (220,80) { } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д