.NET 4.x Как правильно использовать механизмы наследования и полиморфизма для создания единого интерфейса - C#
Формулировка задачи:
Доброго времени суток Комрады!
Я невкурю тему про полиморфную обработку или как кошерно_правильно и рассово_верно использовать механизмы наследования и полиморфизма для создания единого интерфейса который позволил бы
удобно
работать с наследниками базового класса,Например
: Нам нужно запихнуть в контейнер разношёрстные производные классы находящиеся на разных уровнях иерархии \ ветках наследования, но все имеющие базового предка абстрактного класса Animals и проходя циклом по контейнеру(изначально созданному под Animals ) выяснять есть ли у такого то производного от него класса такой то метод и вызывать его, если нету то переходить на следующий элемент в контейнере... Разъясните пожалуйста как это реализовать на шарпах?!
Листинг программы
- abstract class Animals
- {
- protected int health;
- public abstract void Eat();
- }
- class Mammals : Animals
- {
- public override Eat()
- {
- health++;
- }
- }
- class Wolf : Mammals
- {}
- //Предположим что все травоядные ( Herbivorous ) умеют прыгать тогда у всех потомков травоядных должен быть
- // метод Jump()
- class Herbivorous : Animals
- {
- protected int Y;
- public override Eat()
- {
- health++;
- }
- //Тут мы добавляем метод которого НЕТ в Animals, но нам нужно в коллекции Animals
- //такой как List<Animals> animals = new List<Animals>(); вызывать этот метод если наследники ЭТОГО класса
- //присутствуют в коллекции animals как это сделать?
- public void Jump()
- {
- Y++;
- }
- }
- class Rabbit : Herbivorous
- {
- public override void Jump()
- {
- Y += 5;
- }
- }
- //Создаём коллекцию всех животных и добавляем в неё разношёрстных животных находящихся на разных уровнях
- //наследования от Animals
- List<Animals> animals = new List<Animals>();
- animals.Add(Wolf);
- animals.Add(Rabbit);
- //ГЛАВНЫЙ ВОПРОС ЗАКЛЮЧАЕТСЯ В ТОМ, что как в цикле foreach пройтись по всей коллекции животных
- // и если это класс волка вызвать Eat(), а если класс кролика то вызвать Jump ?!
- foreach (Animals A in animals)
- {
- //??????
- A.Eat();
- // или
- //?????
- A.Jump();
- }
- // P.S Иерархию классов менять нельзя!
Решение задачи: «.NET 4.x Как правильно использовать механизмы наследования и полиморфизма для создания единого интерфейса»
textual
Листинг программы
- (A as Herbivorous).Jump();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д