.NET 4.x Как правильно использовать механизмы наследования и полиморфизма для создания единого интерфейса - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток Комрады! Я невкурю тему про полиморфную обработку или как кошерно_правильно и рассово_верно использовать механизмы наследования и полиморфизма для создания единого интерфейса который позволил бы

удобно

работать с наследниками базового класса,

Например

: Нам нужно запихнуть в контейнер разношёрстные производные классы находящиеся на разных уровнях иерархии \ ветках наследования, но все имеющие базового предка абстрактного класса Animals и проходя циклом по контейнеру(изначально созданному под Animals ) выяснять есть ли у такого то производного от него класса такой то метод и вызывать его, если нету то переходить на следующий элемент в контейнере... Разъясните пожалуйста как это реализовать на шарпах?!
Листинг программы
  1. abstract class Animals
  2. {
  3. protected int health;
  4. public abstract void Eat();
  5. }
  6. class Mammals : Animals
  7. {
  8. public override Eat()
  9. {
  10. health++;
  11. }
  12. }
  13. class Wolf : Mammals
  14. {}
  15. //Предположим что все травоядные ( Herbivorous ) умеют прыгать тогда у всех потомков травоядных должен быть
  16. // метод Jump()
  17. class Herbivorous : Animals
  18. {
  19. protected int Y;
  20. public override Eat()
  21. {
  22. health++;
  23. }
  24. //Тут мы добавляем метод которого НЕТ в Animals, но нам нужно в коллекции Animals
  25. //такой как List<Animals> animals = new List<Animals>(); вызывать этот метод если наследники ЭТОГО класса
  26. //присутствуют в коллекции animals как это сделать?
  27. public void Jump()
  28. {
  29. Y++;
  30. }
  31. }
  32. class Rabbit : Herbivorous
  33. {
  34. public override void Jump()
  35. {
  36. Y += 5;
  37. }
  38. }
  39. //Создаём коллекцию всех животных и добавляем в неё разношёрстных животных находящихся на разных уровнях
  40. //наследования от Animals
  41. List<Animals> animals = new List<Animals>();
  42. animals.Add(Wolf);
  43. animals.Add(Rabbit);
  44. //ГЛАВНЫЙ ВОПРОС ЗАКЛЮЧАЕТСЯ В ТОМ, что как в цикле foreach пройтись по всей коллекции животных
  45. // и если это класс волка вызвать Eat(), а если класс кролика то вызвать Jump ?!
  46. foreach (Animals A in animals)
  47. {
  48. //??????
  49. A.Eat();
  50. // или
  51. //?????
  52. A.Jump();
  53. }
  54. // P.S Иерархию классов менять нельзя!

Решение задачи: «.NET 4.x Как правильно использовать механизмы наследования и полиморфизма для создания единого интерфейса»

textual
Листинг программы
  1. (A as Herbivorous).Jump();

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


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

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

13   голосов , оценка 3.692 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы