Доступ к методу подкласса из суперкласса C # - PullRequest
0 голосов
/ 21 октября 2019

Итак, я знаю, что не могу получить доступ к методам и атрибутам подкласса от его родителя. Но у меня есть программа, которая хранит автомобили в массиве (НЕ arraylist - это домашнее задание). Затем Транспортные средства инициализируются в объекте Самолет, Лодка или Автомобиль, полученный из класса Автомобиль. У этих подклассов есть уникальные атрибуты, и мне интересно, как я могу получить к ним доступ?

Вот некоторый (упрощенный) соответствующий код:

Vehicle[] vehicles = new Vehicle[20];

vehicles[0] = new Airplane();

// Setting an attribute of the superclass
vehicles[0].Make = "Boeing";

// Set an attribute from the Airplane class
vehicles[0].Engine = "Jet"; //(obviously this doesn't work)

Как я могу пойтио работе вокруг этого? Я исследовал пару часов, но одна эта проблема ошарашена.

Спасибо:)

Ответы [ 2 ]

5 голосов
/ 21 октября 2019

Вы можете получить доступ к ссылке через тип ее объявления. Поскольку вы объявляете массив равным Vehicle, вы не можете напрямую обращаться к членам подкласса.

Для этого инициализируйте объект отдельно от коллекции, в которой он содержится:

var jet = new Airplane();
jet.Make = "Boeing";
jet.Engine = "Jet";

vehicles[0] = jet;

В качестве альтернативы, используйте инициализатор объекта:

vehicles[0] = new Airplane
{
    Make = "Boeing",
    Engine = "Jet"
};

Было бы совершенно бессмысленно возвращать его обратно сразу после его создания, но вы также можете сделать это:

vehicles[0] = new Airplane();
((Airplane)vehicles[0]).Make = "Boeing";
((Airplane)vehicles[0]).Engine = "Jet";
1 голос
/ 21 октября 2019

Кастинг решил мою проблему:

((Airplane)vehicles[currentItem]).EngineType = "Jet";

// Rather than

vehicles[currentItem].EngineType = "Jet";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...