Приветствую всех, если у вас проблема с решением этой задачи пишите, оно у меня есть!
Не так-то просто сделать упражнение на ковариацию и контравариацию, но нам удалось.
Скачайте проект Generics.Robots и изучите класс Architecture.cs. Он описывает некий проект архитектуры робота. В нем есть AI, вырабатывающий команды, и Device, команды исполняющий.
При этом, AI уже готовы для двух типов роботов (Builder и Shooter), а Device есть только для подвижной части.
Сейчас все работает, но вам не нравится. Что это за object-ы повсюду, где строгая типизация? Конечно, RobotAI и Mover должны стать дженерик-классами, типизируемыми классом команды. Однако, когда вы это сделаете, вы обнаружите, что эта архитектура не компилируется. Здесь нужно применить ковариацию для того, чтобы исправить эту проблему.
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 рублей, закажи решения у меня 🙂

