Страница 1 из 1

И снова про наследование...

СообщениеДобавлено: 09 сен 2020, 22:01
Xtir
Наследование меня немного напрягает, не понятно как правильнее делать...
Допустим у меня есть класс RailroadStation(железнодорожная станция, ну там где разгружаются и загружаются поезда) и RoadStation(дорожная, там где колёсная техника, грузовики там всякие), и они наследуются от базового класса BaseStation. Так же соответственно есть классы Railroad и Road, которые наследуюся от BaseRoad. И собственно вопрос. Как сделать правильно?

Вот так:
Синтаксис:
Используется csharp
class Station
{
    protected BaseRoad[] roads;

    public void Create()
    {
        raods = new BaseRoad[count];

        //создание станции
        //....
    }
}
 


Или вот так:
Синтаксис:
Используется csharp
class RoadStation : Station
{
    private Road[] roads;

    public void Create()
    {
        raods = new Road[count];

        //создание станции
        //....
    }
}

class RailroadStation : Station
{
    private Railroad[] railroads;

    public void Create()
    {
        railroads = new Railroad[count];

        //создание станции
        //....
    }
}


Хочется сделать как в первом примере, но тогда вроде как получается что у ж/д станции, нифига не железная дорога.
А если делать как во втором примере, то тогда придётся продублировать метод Create.
Вот как быть, направьте на путь истинный :(

Re: И снова про наследование...

СообщениеДобавлено: 09 сен 2020, 22:22
Tolking
Ну... Зачем здесь наследование?

Re: И снова про наследование...

СообщениеДобавлено: 09 сен 2020, 23:15
Xtir
Ну это я образно описал классы, на самом деле там всё немного сложнее, просто решил лишнее не писать. Наследование нужно, ну например для того что, жд станция будет содержать поезда которые в данный момент на станции, а дорожная станция фуры.

Re: И снова про наследование...

СообщениеДобавлено: 09 сен 2020, 23:24
Alex5
Ну так ж/д станция не равна поезду, даже близко. Если уж наследоваться, то самим поездам. Например товарному и обычному от некоего базового.

Re: И снова про наследование...

СообщениеДобавлено: 09 сен 2020, 23:38
1max1
Если нет общих членов, то наследование тут ни к селу ни к городу. Ты просто сделай два варианта и ты поймешь где (полная Ж)
И что значит "так" или "вот так", твой второй код нифига не альтернатива первому, это все равно что спросить что лучше кошка или лопата?

Re: И снова про наследование...

СообщениеДобавлено: 09 сен 2020, 23:41
Xtir
Ну это понятно, я и не собираюсь наследовать поезд от станции :) Я говорю что жд станция будет содержать поезд (поезд в свою очередь состоит из локомотива и вагонов), а дорожная станция будет содержать грузовой автомобиль ( грузовик + прицеп или просто грузовик с кузовом).

Re: И снова про наследование...

СообщениеДобавлено: 09 сен 2020, 23:50
Alex5
Xtir писал(а):Ну это понятно, я и не собираюсь наследовать поезд от станции :) Я говорю что жд станция будет содержать поезд (поезд в свою очередь состоит из локомотива и вагонов), а дорожная станция будет содержать грузовой автомобиль ( грузовик + прицеп или просто грузовик с кузовом).

Ну так и пускай содержит, кто же мешает? :) Только наследование то здесь при чём?

Re: И снова про наследование...

СообщениеДобавлено: 02 окт 2020, 14:10
Tr0sT
В твоём случае - RoadStation и RailroadStation - выполняют функцию контейнера дорог. По сути надстройка над List.
А значит и реализовывать их нужно как контейнер

class Station<T> where T : BaseRoad
{
protected T[] roads;
}

соответственно использовать как:
var roadStation = new Station<Road>();
var railroadStation = new Station<RailRoad>();

синтаксис может быть чуть другой, пишу не в ide, а сразу в коммента

Re: И снова про наследование...

СообщениеДобавлено: 02 окт 2020, 15:09
seaman
Ну тогда уж что то типа
class Station<T> : List<T> where T : BaseRoad
и массива внутри не надо.