Пустое поле в производном классе - C#
Формулировка задачи:
Добрый день!
Не могли бы вы подсказать ответ на такой вопрос:
Есть базовый класс:
И далее создаются производные классы, которые помимо прочего будут дополнять метод GetInfo базового класса своими данными:
Вопрос собственно заключается в том, что в производных классах поле base.GetInfo() пустое, но если свойству Name в базовом классе сразу задать значение, а не из конструктора, то все выводится правильно...
Подскажите, что подправить надобно!
public class AutoOrganization
{
public string Name { get; set; }
public AutoOrganization(string name)
{
this.Name = name;
}
public virtual void GetInfo()
{
Console.WriteLine("Название автопредприятия: "+Name);
}
}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());
}
}Решение задачи: «Пустое поле в производном классе»
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>());
}
}
}