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

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

179
Преобразовать список <DerivedClass> в список <BaseClass>

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

162
Пример ковариантности и контравариантности в реальном мире

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

160
Почему массивы ковариантны, а дженерики инвариантны?

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

149
Почему ковариация и контравариантность не поддерживают тип значения

IEnumerable<T>является ко-вариантом, но не поддерживает тип значения, только ссылочный тип. Приведенный ниже простой код успешно скомпилирован: IEnumerable<string> strList = new List<string>(); IEnumerable<object> objList = strList; Но переход от stringк intполучит...

147
Почему пример не компилируется, иначе как (со-, противо- и не-) дисперсия работает?

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

145
Преобразование ковариантного массива из x в y может вызвать исключение во время выполнения

У меня есть private readonlyсписок LinkLabels ( IList<LinkLabel>). Позже я добавляю LinkLabels в этот список и добавляю эти метки к FlowLayoutPanelследующему: foreach(var s in strings) { _list.Add(new LinkLabel{Text=s}); } flPanel.Controls.AddRange(_list.ToArray()); ReSharper показывает мне...

115
Проблема понимания ковариационной контравариантности с дженериками в C #

Я не могу понять, почему следующий код C # не компилируется. Как видите, у меня есть статический универсальный метод Something с IEnumerable<T>параметром (и Tон должен быть IAинтерфейсом), и этот параметр не может быть неявно преобразован в IEnumerable<IA>. Какое объяснение? (Я не ищу...

113
Объяснение ковариации, инвариантности и контравариантности простым языком?

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

106
Как универсальная ковариация и контравариантность реализованы в C # 4.0?

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

105
Приведите примеры функций, которые демонстрируют ковариацию и контравариантность в случаях как перегрузки, так и переопределения в Java? [закрыто]

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

94
Почему неизменяемый набор 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");...

88
Поддерживает ли C # ковариантность возвращаемого типа?

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

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

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

85
Почему в C # нельзя сохранить объект List <string> в переменной List <object>

Кажется, что объект List не может быть сохранен в переменной List в C # и даже не может быть явно приведен таким образом. List<string> sl = new List<string>(); List<object> ol; ol = sl; приводит к невозможности неявно преобразовать тип...

35
Что делает ValueTuple ковариантным?

Это правильно компилируется в C # 7.3 (Framework 4.8): (string, string) s = ("a", "b"); (object, string) o = s; Я знаю, что это синтаксический сахар для следующего, который также правильно компилируется: ValueTuple<string, string> s = new ValueTuple<string, string>("a", "b");...