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

Программирование на Юнити.

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

Сообщение Xtir 09 сен 2020, 22:01

Наследование меня немного напрягает, не понятно как правильнее делать...
Допустим у меня есть класс 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.
Вот как быть, направьте на путь истинный :(
Последний раз редактировалось Xtir 09 сен 2020, 23:23, всего редактировалось 1 раз.
Xtir
UNIверсал
 
Сообщения: 498
Зарегистрирован: 21 окт 2016, 00:37

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

Сообщение Tolking 09 сен 2020, 22:22

Ну... Зачем здесь наследование?
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2716
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

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

Сообщение Xtir 09 сен 2020, 23:15

Ну это я образно описал классы, на самом деле там всё немного сложнее, просто решил лишнее не писать. Наследование нужно, ну например для того что, жд станция будет содержать поезда которые в данный момент на станции, а дорожная станция фуры.
Xtir
UNIверсал
 
Сообщения: 498
Зарегистрирован: 21 окт 2016, 00:37

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

Сообщение Alex5 09 сен 2020, 23:24

Ну так ж/д станция не равна поезду, даже близко. Если уж наследоваться, то самим поездам. Например товарному и обычному от некоего базового.
Linux это просто
Экономика это просто
Forex это просто
Мой канал на YouTube
Аватара пользователя
Alex5
Старожил
 
Сообщения: 507
Зарегистрирован: 22 авг 2019, 17:37

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

Сообщение 1max1 09 сен 2020, 23:38

Если нет общих членов, то наследование тут ни к селу ни к городу. Ты просто сделай два варианта и ты поймешь где (полная Ж)
И что значит "так" или "вот так", твой второй код нифига не альтернатива первому, это все равно что спросить что лучше кошка или лопата?
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

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

Сообщение Xtir 09 сен 2020, 23:41

Ну это понятно, я и не собираюсь наследовать поезд от станции :) Я говорю что жд станция будет содержать поезд (поезд в свою очередь состоит из локомотива и вагонов), а дорожная станция будет содержать грузовой автомобиль ( грузовик + прицеп или просто грузовик с кузовом).
Xtir
UNIверсал
 
Сообщения: 498
Зарегистрирован: 21 окт 2016, 00:37

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

Сообщение Alex5 09 сен 2020, 23:50

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

Ну так и пускай содержит, кто же мешает? :) Только наследование то здесь при чём?
Linux это просто
Экономика это просто
Forex это просто
Мой канал на YouTube
Аватара пользователя
Alex5
Старожил
 
Сообщения: 507
Зарегистрирован: 22 авг 2019, 17:37

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

Сообщение Tr0sT 02 окт 2020, 14:10

В твоём случае - RoadStation и RailroadStation - выполняют функцию контейнера дорог. По сути надстройка над List.
А значит и реализовывать их нужно как контейнер

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

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

синтаксис может быть чуть другой, пишу не в ide, а сразу в коммента
Tr0sT
UNец
 
Сообщения: 9
Зарегистрирован: 21 июн 2014, 11:25

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

Сообщение seaman 02 окт 2020, 15:09

Ну тогда уж что то типа
class Station<T> : List<T> where T : BaseRoad
и массива внутри не надо.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 20