.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();