Пустое поле в производном классе - C#

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

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

Добрый день! Не могли бы вы подсказать ответ на такой вопрос: Есть базовый класс:
public class AutoOrganization
    {
        public string Name { get; set; }
 
        public AutoOrganization(string name)
        {
            this.Name = name;
        }
        public virtual void GetInfo()
        {
            Console.WriteLine("Название автопредприятия: "+Name);
        }
    }
И далее создаются производные классы, которые помимо прочего будут дополнять метод GetInfo базового класса своими данными:
private static double Mileage;
        private static int busCount;
        public Bus(double mileage)
        {
            Mileage += mileage;
            busCount++;
        }
        public static void GetMileage()
        {
            Console.WriteLine("Пробег: "+Mileage);
        }
        public double AverageMileage()
        {
            return Mileage / busCount;
        }
        public override void GetInfo()
        {
            base.GetInfo();
            Console.WriteLine("Общий пробег автобусов: " + Mileage);
            Console.WriteLine("Количество автобусов в автопарке: "+busCount);
            Console.WriteLine("Средний пробег одного автобуса: " + AverageMileage());
        }
    }
Вопрос собственно заключается в том, что в производных классах поле base.GetInfo() пустое, но если свойству Name в базовом классе сразу задать значение, а не из конструктора, то все выводится правильно... Подскажите, что подправить надобно!

Решение задачи: «Пустое поле в производном классе»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace AutoParkLib
{
    public abstract class Auto
    {
        public string Number { get; set; }
        public int Mileage { get; set; }
        public Auto(string number, int mileage)
        {
            Number = number;
            Mileage = mileage;
        }
    }
 
    public class Bus : Auto
    {
        private int SeatsNumber { get; set; }
        public Bus(string number, int mileage, int seatsNumber)
            : base(number, mileage)
        {
            SeatsNumber = seatsNumber;
        }
    }
 
    public class Truck : Auto
    {
        public int Carrying { get; set; }
        public Truck(string number, int mileage, int carrying)
            : base(number, mileage)
        {
            Carrying = carrying;
        }
    }
 
    public class AutoPark
    {
        public List<Auto> AutoList { set; get; }
        public string ParkName;
        public AutoPark(string parkName)
        {
            ParkName = parkName;
            AutoList = new List<Auto>();
        }
 
        public void Add(Auto auto)
        {
            AutoList.Add(auto);
        }
 
        public double AverMiliage<T>()
        {
            return AutoList.OfType<T>().Average(x => (x as Auto).Mileage);
        }
 
    }
 
    class Program
    {
        public static void Main(string[] args)
        {
            AutoPark park = new AutoPark("Автопарк №1");
            park.Add(new Bus("123321", 500000, 55));
            park.Add(new Truck("3245345", 100000, 5));
            park.Add(new Bus("56786", 200000, 80));
            park.Add(new Truck("2345", 120000, 15));
            park.Add(new Bus("567856", 260000, 40));
            Console.WriteLine("Средний пробег автобусов {0}", park.AverMiliage<Bus>());
            Console.WriteLine("Средний пробег грузовиков {0}", park.AverMiliage<Truck>());
        }
 
    }
}

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


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

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

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