Ковариантный кортеж C# 4.0

(Я проверил бы это для меня, но у меня (еще) нет VS2010),

Скажите, что у меня есть 2 основных интерфейса:

IBaseModelInterface
IBaseViewInterface

И 2 интерфейса, понимающие их:

ISubModelInterface : IBaseModelInterface
ISubViewInterface : IBaseViewInterface

Если я определяю a Tuple<IBaseModelInterface, IBaseViewInterface> Я хотел бы установить это на основе результата фабрики, которая возвращается Tuple<ISubModelInterface, ISubViewInterface>.

В C# 3 я не могу сделать этого даже при том, что интерфейсы sub понимают основные интерфейсы. И я - вполне уверенный C# 4, позволяет мне сделать это, если я использовал IEnumerable<IBaseModelInterface> потому что это теперь определяется с in ключевое слово для разрешения ковариантности. Делает Tuple позвольте мне делать это?

Из того, что (мало) я понимаю, ковариантность только позволяется в интерфейсах, делает это означает там потребности быть ITuple<T1, T2> интерфейс? Это существует?

11
задан RichK 20 May 2010 в 10:28
поделиться

1 ответ

Кортеж — это класс (ну, семейство классов) — он инвариантен по определению. Как вы упоминали далее, только интерфейсы и типы делегатов поддерживают общую дисперсию в .NET 4.

Я не знаю интерфейса ITuple. Может быть один, который будет ковариантным, так как кортежи неизменяемы, поэтому вы получаете значения только «из» API.

12
ответ дан 3 December 2019 в 05:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: