Вопросы с тегом «covariance»

Ковариантность, контравариантность и инвариантность описывают, как существующая иерархия наследования типов изменяется при некотором преобразовании (например, использовании в дженериках). Если преобразование сохраняет порядок исходной иерархии, оно является «ковариантным». Если он переворачивает его, это «контравариантно». Если он его нарушает, он «инвариантен».

5
<out T> vs <T> в Generics
В чем разница между &lt;out T&gt;и &lt;T&gt;? Например: public interface IExample&lt;out T&gt; { ... } против public interface IExample&lt;T&gt; { ... }
189 c#  generics  covariance 

11
Преобразовать список <DerivedClass> в список <BaseClass>
Хотя мы можем наследовать от базового класса / интерфейса, почему мы не можем объявить List&lt;&gt; использование одного и того же класса / интерфейса? interface A { } class B : A { } class C : B { } class Test { static void Main(string[] args) { A a = …

9
Пример ковариантности и контравариантности в реальном мире
У меня небольшие проблемы с пониманием того, как я буду использовать ковариацию и контравариантность в реальном мире. До сих пор я видел только один и тот же старый пример массива. object[] objectArray = new string[] { "string 1", "string 2" }; Было бы неплохо увидеть пример, который позволил бы мне …
162 c#  c#-4.0  covariance 

8
Почему массивы ковариантны, а дженерики инвариантны?
От эффективной Явы Джошуа Блох, Массивы отличаются от универсального типа двумя важными способами. Первые массивы ковариантны. Обобщения являются инвариантами. Ковариант просто означает, что если X является подтипом Y, то X [] также будет подтипом Y []. Массивы являются ковариантными, так как string является подтипом Object So String[] is subtype of …

4
Почему ковариация и контравариантность не поддерживают тип значения
IEnumerable&lt;T&gt;является ко-вариантом, но не поддерживает тип значения, только ссылочный тип. Приведенный ниже простой код успешно скомпилирован: IEnumerable&lt;string&gt; strList = new List&lt;string&gt;(); IEnumerable&lt;object&gt; objList = strList; Но переход от stringк intполучит скомпилированную ошибку: IEnumerable&lt;int&gt; intList = new List&lt;int&gt;(); IEnumerable&lt;object&gt; objList = intList; Причина объясняется в MSDN : Дисперсия применяется только к …


4
Почему пример не компилируется, иначе как (со-, противо- и не-) дисперсия работает?
Исходя из этого вопроса , может кто-нибудь объяснить в Scala следующее: class Slot[+T] (var some: T) { // DOES NOT COMPILE // "COVARIANT parameter in CONTRAVARIANT position" } Я понимаю различие между +Tи Tв объявлении типа (оно компилируется, если я использую T). Но тогда как на самом деле написать класс, …

7
Преобразование ковариантного массива из x в y может вызвать исключение во время выполнения
У меня есть private readonlyсписок LinkLabels ( IList&lt;LinkLabel&gt;). Позже я добавляю LinkLabels в этот список и добавляю эти метки к FlowLayoutPanelследующему: foreach(var s in strings) { _list.Add(new LinkLabel{Text=s}); } flPanel.Controls.AddRange(_list.ToArray()); ReSharper показывает мне предупреждение: Co-variant array conversion from LinkLabel[] to Control[] can cause run-time exception on write operation. Пожалуйста, помогите …

2
Проблема понимания ковариационной контравариантности с дженериками в C #
Я не могу понять, почему следующий код C # не компилируется. Как видите, у меня есть статический универсальный метод Something с IEnumerable&lt;T&gt;параметром (и Tон должен быть IAинтерфейсом), и этот параметр не может быть неявно преобразован в IEnumerable&lt;IA&gt;. Какое объяснение? (Я не ищу обходной путь, просто чтобы понять, почему это не …

3
Объяснение ковариации, инвариантности и контравариантности простым языком?
Сегодня я прочитал несколько статей о ковариантности, контравариантности (и инвариантности) в Java. Я читал статьи в Википедии на английском и немецком языках, а также некоторые другие сообщения в блогах и статьи IBM. Но я все еще немного не понимаю, о чем они? Некоторые говорят, что это связано с отношениями между …

2
Как универсальная ковариация и контравариантность реализованы в C # 4.0?
Я не был на PDC 2008, но услышал новости о том, что C # 4.0 объявлен для поддержки универсальной ковариантности и контр-дисперсии. То есть List&lt;string&gt;можно назначить List&lt;object&gt;. Как такое могло быть? В книге Джона Скита « C # in Depth» объясняется, почему универсальные шаблоны C # не поддерживают ковариацию и …

3
Приведите примеры функций, которые демонстрируют ковариацию и контравариантность в случаях как перегрузки, так и переопределения в Java? [закрыто]
Закрыто . Этот вопрос должен быть более конкретным . В настоящее время он не принимает ответы. Хотите улучшить этот вопрос? Обновите вопрос, чтобы он фокусировался только на одной проблеме, отредактировав этот пост . Закрыт 5 лет назад . Уточните этот вопрос Пожалуйста, покажите хороший пример ковариации и контравариантности в Java.


3
Почему неизменяемый набор Scala не ковариантен по своему типу?
РЕДАКТИРОВАТЬ : переписал этот вопрос на основе исходного ответа scala.collection.immutable.SetКласс не ковариантен в параметре типа. Почему это? import scala.collection.immutable._ def foo(s: Set[CharSequence]): Unit = { println(s) } def bar(): Unit = { val s: Set[String] = Set("Hello", "World"); foo(s); //DOES NOT COMPILE, regardless of whether type is declared //explicitly in …

9
Поддерживает ли C # ковариантность возвращаемого типа?
Я работаю с .NET framework, и я действительно хочу иметь возможность создавать страницы нестандартного типа, которые использует весь мой веб-сайт. Проблема возникает, когда я пытаюсь получить доступ к странице из элемента управления. Я хочу иметь возможность возвращать мой конкретный тип страницы вместо страницы по умолчанию. Есть какой-либо способ сделать это? …
88 c#  covariance 

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.