Описание тега generic-variance

0 ответов

Дисперсия (ковариация и контравариантность) в функциях Скалы

Я погружаюсь в концепции FP, используя Scala. Я думаю, что я наконец понял, что такое ковариация и контравариантность и почему типы функций являются контравариантными в своих типах аргументов и ковариантными в своих типах возвращаемых значений. Но е…
2 ответа

Почему C# не поддерживает варианты универсальных классов?

Возьмите этот небольшой пример LINQPad: void Main() { Foo<object> foo = new Foo<string>(); Console.WriteLine(foo.Get()); } class Foo<out T> { public T Get() { return default(T); } } Не удается скомпилировать с этой ошибкой: Неверны…
20 мар '15 в 13:37
0 ответов

Приведение во время исполнения с использованием параметра общего типа

Я создаю функцию диспетчеризации команд, которая позволяет объекту, производному от базового класса, разрешать (из контейнера IoC) обработчик для типа команды и отправляет объект команды туда для обработки. Мои типы выглядят так: public abstract cla…
27 фев '14 в 14:43
2 ответа

Как реализовать интерфейс Kotlin, который ссылается на соответствующий тип?

В интересах глупых мысленных экспериментов, основная цель которых состоит в том, чтобы исследовать, как работает часть языка, я решил, что хочу исследовать способ сделать программистов на Python более комфортными в Котлине. Проще говоря, я могу сдел…
27 сен '18 в 17:27
1 ответ

Почему я должен привести к параметру типа и не могу использовать ограниченный тип?

Может кто-нибудь объяснить, почему я должен привести к T и почему Add2 не принимает Bar в качестве параметра? class Foo<T> where T : class, IBar { void Add1(IDo<T> @do) { @do.Stuff(new Bar() as T); } // Add2 does not compile: // Argument…
25 апр '14 в 11:43
2 ответа

Дисперсионная функция карты списка Scala

У меня есть вопрос, который меня беспокоит. Списки в Scala являются ковариантными (List[+A]) Допустим, у нас есть эти классы: class A class B extends A map функция List[B] берет на себя функцию f: B => C Но я также могу использовать f: A => Cк…
3 ответа

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

Общая дисперсия в C# 4.0 была реализована таким образом, что можно написать следующее без исключения (что происходит в C# 3.0): List<int> intList = new List<int>(); List<object> objectList = intList; [Пример не функционален: см. От…
1 ответ

Котлин: Создание подклассов универсальных типов наследует функции и ограничивает доступные типы вывода

У меня есть следующие классы Kotlin, реализующие что-то похожее на интерфейс Collections или набор, который содержит несколько элементов. abstract class MyCollection<C: MyCollection<C>> { abstract fun contains(e: Member<C>): Member…
04 фев '18 в 18:19
1 ответ

Как я могу обработать эту ошибку, которая не является подтипом переопределенной

Я пытаюсь написать проверяемый интерфейс формы в Kotlin. В части проверки я использую https://github.com/kamedon/Validation. Вот очень простой код, который я пытаюсь запустить; import com.kamedon.validation.Validation abstract class Validatable { ab…
2 ответа

Как реализована общая ковариантность и контрастность в C# 4.0?

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

Дисперсия типов функций по сравнению с интерфейсы

Я пытаюсь понять правила дисперсии для типов функций. Кажется, что они не обрабатывают ввод и вывод одинаково (вплоть до двойственности). Рассмотрим эту программу. let mk1 s = s |> Seq.iter (fun _ -> ()) // val mk1 : s:seq<'a> -> unit…
10 апр '14 в 06:48
2 ответа

Метод одиночного расширения для IDictionary<K, IEnumerable / IList / ICollection <V >>

Я пытаюсь написать метод расширения, который будет конвертировать IDictionary&lt;K, S&lt;V&gt;&gt; проведение любого типа коллекции / последовательности (S&lt;V&gt;) чтобы ILookup&lt;K, V&gt; которая является более правильной структурой данных в эти…
1 ответ

Проблема с использованием Lazy<T> из общего абстрактного класса

У меня есть универсальный класс, из которого происходят все мои классы DAO, который определен ниже. У меня также есть базовый класс для всех моих сущностей, но он не является универсальным. Метод GetIdOrSave будет другой тип, чем я определил SabaAbs…
20 май '10 в 18:03
1 ответ

Принудительно указать параметр типа, чтобы он был инвариантным на сайте использования, когда он ковариантен на сайте объявлений.

Я строю функцию расширения на KProperty1, Функция должна принимать аргумент, расширяющий тип значения свойства (R), даже если KProperty1 ковариантен в параметре типа R, Немного придуманный пример будет следующим, хотя мое использование более законно…
2 ответа

Может ли C# 4.0 помочь мне вызвать конструктор базового класса с upcast?

Я немного читал об общей дисперсии, и у меня пока нет полного понимания этого, но я хотел бы знать, делает ли это возможным что-то вроде следующего? class A&lt;T&gt; { } class B { } class C : B { } class My1 { public My1(A&lt;B&gt; lessDerivedTempla…
25 май '12 в 19:12
3 ответа

Общая типизация, так что результат одного метода может быть снова использован в качестве параметра другого метода

У меня есть код, который сводится к заводской инициализации объекта, а затем снова использовать этот объект для выполнения дополнительных операций: trait Factory[T] { def initialize(): T; def finish(t: T): Unit; } Насколько я понимаю, результат init…
15 янв '15 в 08:46
1 ответ

Универсальное решение для добавления объекта типа к объекту подходящего универсального типа

Я чувствую, что интерфейс (наоборот?) - это ответ, но я не могу найти правильное решение. Давайте иметь эти классы: public abstract class Fruit { } public class Banana : Fruit { } public class Apple : Fruit { } public abstract class Picture { } publ…
22 окт '18 в 21:43
1 ответ

C# делегат под капотом вопрос

Я немного покопался в дисперсии делегатов после прочтения следующего вопроса в SO: Delegate.CreateDelegate () и generics: Ошибка привязки к целевому методу Я нашел очень хороший фрагмент кода от Барри Келли на https://www.blogger.com/comment.g?blogI…
05 май '10 в 16:39
0 ответов

Определите контраст и ковариацию для универсального объекта

В Java ковариация для универсального может быть определена как &lt;? extends Clazz&gt; и противоречие может быть определено как &lt;? super Clazz&gt;, но возможно ли определить обе эти черты одновременно? Возьмите этот случай, например: interface Fo…
20 апр '16 в 15:48
1 ответ

Как написать метод, который принимает параметр с ковариантной или контравариантной границей в scala?

Я пишу программу Scala, которая в какой-то момент должна обеспечивать обновление статуса для некоторой задачи, и она могла бы предоставлять ее также для групп задач. Дело в том, что в разных phaseс, детали разные. Так что на самом деле существуют ра…
01 дек '15 в 15:19