.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();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д