Наследование readonly поля - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуй, киберфорум. Изучаю C# и .NET с помощью книги Эндрю Троеллсена. Дошёл до полей, доступных только для чтения, и решил попробовать создать дочерний класс от базового, содержащего данное поле. В коде будет понятнее, я думаю.
 
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;
            }
       
    }
И тут вылезает ошибка: Ошибка CS0191 Присваивание значений доступному только для чтения полю допускается только в конструкторе и в инициализаторе переменных. Что я делаю не так? Ошибку в MSDN гуглил, там ничего про наследование не говорится, а в базовом классе у меня и так работает всё. Здесь же не позволяет в конструкторе перезаписать, хотя по описанию ошибки именно тут должно быть всё сделано, именно в конструкторе. Пробовал добавить this.maxSpeed, результата нет. Не может же readonly как-то иначе наследоваться. Для теста попробовал вызвать следующий код:
            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);
вывод гласит: машина едет 50, максимальная скорость машины 180, максимальная скорость вана 35, скорость вана 20. Из полученного делаю вывод, что поле readonly нормально присвоилось в соответствующем конструкторе базового класса и стало равно 180, а вот наследовалось в miniWan с значением 35, которое описано в стандартном конструкторе базового класса. Как, почему, зачем именно оттуда, и как же всё таки в итоге в miniWan мне переопределить значение для данного поля?

Решение задачи: «Наследование readonly поля»

textual
Листинг программы
 class deluxeMiniWan : MiniWan
    {
        public deluxeMiniWan() :base (220,80)
        {
 
        }
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.8 из 5
Похожие ответы