Например, у меня есть
interface ICommand {}
class MovePiece : ICommand {}
class Successful<CMD> where CMD : ICommand {}
и я хочу следующее:
CovariantlyEqual(
typeof(Successful<ICommand>),
typeof(Successful<MovePiece>))
.ShouldEqualTrue()
Обновление
Эрик спрашивает ниже, почему я хотел бы проверить такую вещь. Справедливо. Я думаю, что во многих случаях была бы полезна возможность легко проверить это «равенство». Возьмите в качестве примера простой агрегатор событий - вы хотите сказать ему, что вы заинтересованы в подписке на все успешные команды. Между тем, другой компонент может быть заинтересован только в успешном событии MovePiece.
Полагаю, я ошибаюсь, но я подумал, что именно в этом и заключается разница и противоречие. Может быть, равенство - это неправильный термин, но очевидно, что существует какая-то связь между определением типа Successful<MovePiece>
и Successful<ICommmand>
. Разве в языке нет ничего, что могло бы легко его раскрыть?