covariance- все статьи тега


Общая дисперсия в C# 4.0

Универсальная дисперсия в C# 4.0 была реализована таким образом, что можно написать следующее без исключения (что и произошло бы в C# 3.0): List<int> intList = new List<int>(); List<object> objectList = intList; [пример нефункционального: смотрите ответ Джона Скита] Я недавно присутствовал на конференции, где Джон Скит дал отличный обзор общей дисперсии, но я не уверен, что полностью понимаю ее - я понимаю значение ключевых слов in и out, когда речь заходит о контра и к ...

Почему массивы ковариантны, а обобщения инвариантны?

от эффективного Java Джошуа Блоха, массивы отличаются от универсального типа двумя важными способами. Первые массивы являются ковариантными. Дженерики являются инвариантными. Ковариант просто означает, что если X является подтипом Y, то X[] также будет подтипом Y[]. Массивы ковариантны, так как строка является подтипом объекта So String[] is subtype of Object[] инвариант просто означает, независимо от того, является ли X подтипом Y или нет , List<X> will not be subType of List<Y& ...

Понимание Ковариантных и контравариантных интерфейсов в C#

я столкнулся с ними в учебнике, который я читаю на C#, но мне трудно понять их, вероятно, из-за отсутствия контекста. есть ли хорошее краткое объяснение того, что они есть и для чего они полезны там? редактировать для уточнения: интерфейс Ковариантного: interface IBibble<out T> . . интерфейс Контравариантным: interface IBibble<in T> . . ...

Почему в Haskell не так много дискуссий о co - и contra-дисперсии (в отличие от Scala или C#)?

Я знаю, что ковариантность и контравариантность типов. Мой вопрос в том, почему я еще не сталкивался с обсуждением этих концепций в моем исследовании Haskell (в отличие, скажем, от Scala)? кажется, есть фундаментальная разница в том, как Haskell рассматривает типы В отличие от Scala или C#, и я хотел бы сформулировать, в чем эта разница. или, может быть, я ошибаюсь, и я просто еще не узнал достаточно Haskell: -) ...

Есть ли общая задача.WaitAll?

Я запустить несколько параллельных задач, как это: var tasks = Enumerable.Range(1, 500) .Select(i => Task.Factory.StartNew<int>(ProduceSomeMagicIntValue)) .ToArray(); и затем присоединиться к ним с Task.WaitAll(tasks); на этой последней строке я получаю синий волнистый маркер под tasks, с предупреждением: Co-variant array conversion from Task[] to Task[] can cause run-time exception on write operation. Я понимаю, почему я получаю это сообщение, но есть способ обойти ...