Ваша проблема в плохом дизайне. Класс должен иметь как можно меньше обязанностей, поэтому отображение себя пользователю не должно быть одним из них.
Кроме того, в методе Vehicle.Display
вы не используете tank.GetDisplayString()
Также у вас есть методы «отображения», которые не нужны, то есть метод ToString
, унаследованный от object
, должен возвращать «строковое представление» вашего объекта, поэтому вы должны переопределить его.
Я предлагаю более чистый подход:
Автомобиль
public override string ToString()
{
// where tank.ToString() should go? It is not used here...
return string.Format("MK: {0} MDL: {1} WGT: {2} CLR: {3} MPG: {4} ",
make, model, weight, color, mpg, tank.ToString());
// also you can use interpolated string
// return $"MK: {make} MDL: {model} WGT: {weight} CLR: {color} MPG: {mpg} ";
}
Бензобак
public override string ToString()
{
return string.Format("TANK: Cap: {0} LEVEL: {1}", tankCapacity, tankLevel);
}
public void display()
{
System.Console.WriteLine(GetDisplayString());
}
Затем для отображения ваших классов вы можете использовать просто:
Console.WriteLine(myVahicle.ToString());
Console.WriteLine(myGasTank.ToString());