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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.692 из 5
Похожие ответы