Описание тега contravariance

Within the type system of a programming language, covariance and contravariance refers to the ordering of types from narrower to wider and their interchangeability or equivalence in certain situations (such as parameters, generics, and return types)
2 ответа

Я действительно не понимаю эту вещь со-контравариантности... У меня не может быть как обобщенных методов get, так и set?

Я думаю, что я объясню мои проблемы с некоторыми примерами.. interface IModel {} class MyModel : IModel {} interface IRepo<T> where T: IModel { } class Repo : IRepo<MyModel> { } // Cannot implicitly convert.. An explicit convertion exist…
1 ответ

Многомерный IReadOnlyDictionary, типизированный с использованием интерфейса для внутреннего типа значения

Это немного сложно выразить словами, поэтому я объясню на примере. Следующий код не компилируется: var data = new[] { new {Item = "abc", Values = new[] {1,2,3}}, new {Item = "def", Values = new[] {1,2,3}}}; IReadOnlyDictionary<string, IReadOnlyDi…
0 ответов

Контравариантность в словарном значении

Почему это не законный код? public interface IExcelExport<in T> { byte[] ExportSheetsToExcel(IDictionary<string, IEnumerable<T>> data, bool formatDateColumns = true); } Что дает эту ошибку. Invalid variance: The type parameter 'T' …
21 мар '16 в 15:24
1 ответ

Основная функция N ков / контравариантность

У меня есть в значительной степени код, организованный так: class Person(name: String, val addr: Int) { def distance(that: Person) = this.addr - that.addr } class Employee(_name: String, role: String, _addr: Int) extends Person(_name, _addr) { def s…
24 июн '15 в 13:06
3 ответа

Дженерики: Список<? extends Animal> - это то же самое, что List<Animal>?

Я просто пытаюсь понять extends Ключевое слово в Java Generics. List&lt;? extends Animal&gt; означает, что мы можем заполнить любой объект в List который является Animal тогда следующее не будет означать то же самое: List&lt;Animal&gt; Может кто-ниб…
04 апр '10 в 18:01
2 ответа

C# .Net Covariance - еще раз для старых времен?

Итак, у нас есть это: public interface IWidget { int Id { get; set; } } public class Widget : IWidget { public int Id { get; set; } } public class WidgetProcessor { public static void ProcessWidgets1(IList&lt;IWidget&gt; widgets) { } public static v…
21 мар '13 в 15:52
2 ответа

В Scala, каким должен быть тип карты из строки в класс case и карта из строки в функции, принимающая эти классы case в качестве входного параметра?

Сценарий, который я пытаюсь смоделировать, выглядит следующим образом. У меня есть пара классов, которые отличаются по своим параметрам, но все они расширяют эту черту Entity, // case classes trait Entity case class E1(..params..) extends Entity cas…
0 ответов

Почему невозможно иметь контравариантные типы возврата

Я играю с дженериками в Java, и я нашел кое-что странное: Следующее компилирует: public static &lt;A, B extends A&gt; B reduce(Function2&lt;A, A, B&gt; func) { //code doesn't matter } Но следующее не делает: public static &lt;A, B super A&gt; B redu…
06 май '14 в 17:45
1 ответ

VB.NET реализовать несколько контравариантных типов интерфейса

Основной вопрос: При наличии интерфейса: ICopiesFrom(Of In TModel), где нет ограничения по типу для универсального аргумента, может ли этот интерфейс быть реализован более одного раза для одного и того же конкретного типа с использованием аргумента …
4 ответа

Ковариантность и Контравариантность в C#

Начну с того, что я являюсь Java-разработчиком, который учится программировать на C#. Поэтому я делаю сравнения того, что я знаю, с тем, что я изучаю. Я играю с дженериками C# уже несколько часов, и мне удалось воспроизвести те же вещи, которые я зн…
21 мар '12 в 14:02
1 ответ

Обнаружение отклонений от общих параметров типа интерфейсов

Есть ли способ отразить на интерфейсе, чтобы обнаружить отклонение от его параметров общего типа и возвращаемых типов? Другими словами, могу ли я использовать отражение, чтобы различать два интерфейса: interface IVariant&lt;out R, in A&gt; { R DoSom…
1 ответ

Autofac контравариантность и разрешение открытых универсальных типов

При разрешении всех реализаций универсального типа (с контравариантным T) из autofac я хотел бы получить все возможные контравариантные совпадения. Это работает только при регистрации ContravariantRegistrationSource. Но потом я получаю слишком много…
28 сен '17 в 08:52
0 ответов

Есть ли шаблон, который охватывает этот случай специализации

Рассмотрим этот случай специализации, когда менее специализированному классу требуется доступ к объекту типа интерфейса, но более специализированному классу требуется доступ к конкретной реализации этого интерфейса: class IPropulsionMechanism { publ…
1 ответ

Как получить ограниченные символы в Java?

В статье википедии о со-и контравариантности есть пример использования, а затем пояснительное предложение, описывающее, что означает объявление типа. Я считаю это чрезвычайно полезным. Прочитав объяснение несколько раз, я чувствую, что понимаю, что …
14 мар '17 в 22:53
1 ответ

Назначьте подкласс для интерфейса с использованием обобщенных и ковариантных элементов

Я определил 3 интерфейса: public interface IManufacturerInput { } public interface IManufacturerOutput { } public interface IManufacturerApi&lt;in S, out T&gt; where S : IManufacturerInput where T : IManufacturerOutput { T Calculate(S); } И я опреде…
30 мар '17 в 08:49
2 ответа

Проблема ковариации в C#

У меня есть класс, объявленный так: internal private abstract class BoxGroup&lt;TS&gt; : IBoxGroup where TS : SavedState В этом классе у меня есть этот метод: protected virtual TS saveState() { return new SavedState(Width, Height); } Я думал, что эт…
05 янв '11 в 02:07
2 ответа

Вызов контравариантных методов в Java

Учитывая ситуацию, подобную приведенной ниже: interface Base { } interface Derived extends Base{ } interface OtherDerived extends Base{ } class A { void implementation(Derived stuff) { // Implementation A } } class B extends A { // contravariant; do…
13 фев '16 в 21:49
2 ответа

Применяется ли ковариация / контравариантность к неявно конвертируемым типам, которые не реализуют общий интерфейс?

В настоящее время я читаю о ковариантности и контравариантности в C#. Все примеры содержат подробности об объектах, которые могут быть преобразованы, и отличаются из-за точности реализации интерфейса, например куда Circle : IShape ковариации: SomeTy…
19 июл '11 в 15:01
3 ответа

Почему я не могу конвертировать из List<IScreen> в List<IRenderable>, даже если IScreen реализует IRenderable?

Довольно понятный вопрос, рад за любой ответ. Для меня это не имеет смысла. Меня не волнует потеря информации. Я просто хочу объединить все мои списки, которые как-то наследуют IRenderable, в один список, а затем вызвать для него методы IRenderable.…
24 май '10 в 10:03
2 ответа

Понимание контравариантности в C#

Я учусь на контравариантности и попробовал следующее, чтобы впитать концепцию: interface B&lt;T&gt; { T h(); } public class SomeOtherClass&lt;T&gt; : B&lt;T&gt; { public T h() { return default(T); } } public class Trial { static void Main() { SomeOt…
17 янв '16 в 06:04