Запитання з тегом «covariance»

Коваріантність, противаріантність та інваріантність описують, як змінюється існуюча ієрархія спадкування, коли вона зазнає певної трансформації (наприклад, використання в генеріках). Якщо перетворення підтримує впорядкування вихідної ієрархії, воно є "коваріантним". Якщо вона перевертає її, вона є "противажною". Якщо це порушить, це "інваріант".

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


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

8
Чому масиви коваріантні, але генеричні дані інваріантні?
З ефективної Java Джошуа Блоха, Масиви відрізняються від загального типу двома важливими способами. Перші масиви є коваріантними. Дженріки інваріантні. Коваріант просто означає, що якщо X є підтипом Y, то X [] також буде підтипом Y []. Масиви є коваріантними, оскільки рядок є підтипом Object So String[] is subtype of Object[] …

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 # не компілюється. Як бачите, у мене є статичний загальний метод Щось із IEnumerable&lt;T&gt;параметром (і Tобмежений IAінтерфейсом), і цей параметр не може бути неявно перетворений у IEnumerable&lt;IA&gt;. Яке пояснення? (Я не шукаю вирішення, аби зрозуміти, чому це не працює). public interface IA …

3
Коваріація, інваріантність та протиріччя пояснюються простою англійською мовою?
Сьогодні я прочитав деякі статті про коваріацію, противагу (та інваріантність) на Java. Я прочитав статтю з англійської та німецької Вікіпедії та деякі інші публікації в блогах та статті від IBM. Але я все ще трохи розгублений, про що саме йдеться? Деякі кажуть, що мова йде про взаємозв'язок типів і підтипів, …

2
Як реалізована загальна коваріація та контра-дисперсія в C # 4.0?
Я не відвідував PDC 2008, але почув новини про те, що оголошено C # 4.0, що підтримує загальну коваріацію та контра-дисперсію. Тобто List&lt;string&gt;може бути призначений List&lt;object&gt;. Як це могло бути? У книзі C # в глибині Джона Скіта пояснюється, чому дженерики 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 …

2
Розуміння коваріантних та контраваріантних інтерфейсів у C #
Я натрапив на них у підручнику, який читаю на C #, але мені важко їх зрозуміти, можливо через відсутність контексту. Чи є гарне стисле пояснення того, що вони є і для чого вони корисні? Змінити для уточнення: Коваріантний інтерфейс: interface IBibble&lt;out T&gt; . . Контраваріантний інтерфейс: interface IBibble&lt;in T&gt; . …

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.