@r3xetdeus

Как наследоваться от 2 абстрактных классов С#?

Добрый день. Только изучаю C#, попалась интересная задача подскажите пожалуйста как решить.
Есть 2 интерфейса, которые наследуются в абстрактных классах (машины и самолёта). Стоит задача описать 3 абстрактный класс который наследует в себе 2 класса (машина Илона Маска). Допустим в C++ есть множественное наследование а как это сделать в c#? Код описан ниже, заранее спасибо.
interface ICar
    {
        void Move();
    }
    interface IPlane
    {
 
        void Fly();
    }

    abstract class StandartCar: ICar
    {   
        public int wheel { get; set; }

        public int doors  { get; set; }        

        public  void Move()
        {
            Console.WriteLine("60 km/h");
        }
    }

    abstract class StandartPlane: IPlane
    {
        public int wings { get; set;  }
        public void Fly()
        {
            Console.WriteLine("500 km/h");
        }

    }

    abstract class MaskCar: ICar, IPlane
    {

    }
  • Вопрос задан
  • 652 просмотра
Пригласить эксперта
Ответы на вопрос 1
@EvgeniiR
https://github.com/EvgeniiR
Стоит задача описать 3 абстрактный класс который наследует в себе 2 класса

Задача изначально поставлена некорректно. Само по себе наследование двух абстрактных классов никакой практической пользы не принесёт, и не даёт никакой уникальной функциональности которую невозможно реализовать через наследование.

Если вам кто-то даёт такие задачки под видом "задачек по ООП" - лесом его надо слать. Все эти наследования Customer от User, User от Human на практике в 99% случаев не нужны, т.к если условно модуль хочет себе Покупателя(Customer), ему нет разницы, Человек(Human) там, или робот и т.д, а любое наследование это жесткие иерархии классов в коде, лишняя связность(чит. Coupling) и лишние зависимости между компонентами, что делает код более сложным для понимания и изменения.

Зачем в данном случае, наземно-воздушную MaskCar наследовать от StandartCar и StandartPlane? Всегда ли она будет вести себя так же как её родители, не будет ли нарушений принципа подстановки(см. Liscov Substitution Principle)?
Если MaskCar планируется изменять независимо от родителей, даже если по каким-то причинам на текущий момент она реализует те же методы, нет никаких проблем определить те же методы в новом классе заново, и при необходимости реализовывать интерфейсы Car и Plane(ICar и IPlane в вашем случае).
Если нужно поведение родителей, в большинстве случаев наследование можно без проблем заменить композицией, если речь идёт о C#, можно также очень удобно решать такие проблемы через делегирование(https://metanit.com/sharp/tutorial/3.13.php)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы