Приветствую всех, если у вас проблема с решением этой задачи пишите, оно у меня есть!
Не так-то просто сделать упражнение на ковариацию и контравариацию, но нам удалось.
Скачайте проект Generics.Robots и изучите класс Architecture.cs. Он описывает некий проект архитектуры робота. В нем есть AI, вырабатывающий команды, и Device, команды исполняющий.
При этом, AI уже готовы для двух типов роботов (Builder и Shooter), а Device есть только для подвижной части.
Сейчас все работает, но вам не нравится. Что это за object-ы повсюду, где строгая типизация? Конечно, RobotAI и Mover должны стать дженерик-классами, типизируемыми классом команды. Однако, когда вы это сделаете, вы обнаружите, что эта архитектура не компилируется. Здесь нужно применить ковариацию для того, чтобы исправить эту проблему.
1 2 3 4 5 6 7 8 9 10 11 |
using System; using System.Collections.Generic; namespace Generics.Robots { public abstract class RobotAI<TCommand>: IMoveCommand { public Point Destination => throw new NotImplementedException(); public abstract object GetCommand(); } |
Задание было переделано с учетом обновления в 2021
Стоимость решения этой задачи всего 100 рублей, закажи решения у меня 🙂