Страницы

Поиск по вопросам

воскресенье, 8 декабря 2019 г.

Как удалить или переименовать поля класса при наследовании

#c_sharp #ооп


У меня есть класс машина и класс электромашина. Дело в том, что класс электромашина
наследует от класса машина поле Fuel и мне ее нужно удалить или переименовать просто
потому-что у электромашины нет топлива а есть заряд. 

class Car
{
    public int MaxSpeed = 180;
    public int Range = 100;
    public int CurrentSpeed = 100;
    public int Fuel = 100;
    public void Drive()
    {
        if (Fuel <= 0)
            throw new Exception("Not enough fuel");
        else
        {
            this.Fuel--;
            Range -= Range / CurrentSpeed;
        }
    }
}
class ElectroCar : Car
{
    int Charge;
    public ElectroCar()
    {
       Charge = base.Fuel;
    }
}

    


Ответы

Ответ 1



Никак. Если у класса-предка есть поля, не имеющие смысла в классе-потомке, то вы неправильно выстроили иерархию наследования. Есть разные пути исправить ситуацию. Например: выделите общее у Car и ElectroCar в базовый класс Vehicle, Car переименуйте в FuelCar, и свойства, относящиеся к топливу, пускай содержит только FuelCar.

Ответ 2



Я предлагаю добавить перечисление Source enum Sources { Gas, Diesel, Petrol, Kerosene, Electricity } Поле fuel заменить на powerSource типа Sources и добавить поле числовое powerIndex которое характеризует числовой показатель расхода энергии

Комментариев нет:

Отправить комментарий