Описание тега 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…
09 ноя '10 в 14:34
1
ответ
Многомерный IReadOnlyDictionary, типизированный с использованием интерфейса для внутреннего типа значения
Это немного сложно выразить словами, поэтому я объясню на примере. Следующий код не компилируется: var data = new[] { new {Item = "abc", Values = new[] {1,2,3}}, new {Item = "def", Values = new[] {1,2,3}}}; IReadOnlyDictionary<string, IReadOnlyDi…
19 авг '13 в 17:15
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<? extends Animal> означает, что мы можем заполнить любой объект в List который является Animal тогда следующее не будет означать то же самое: List<Animal> Может кто-ниб…
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<IWidget> widgets) { } public static v…
21 мар '13 в 15:52
2
ответа
В Scala, каким должен быть тип карты из строки в класс case и карта из строки в функции, принимающая эти классы case в качестве входного параметра?
Сценарий, который я пытаюсь смоделировать, выглядит следующим образом. У меня есть пара классов, которые отличаются по своим параметрам, но все они расширяют эту черту Entity, // case classes trait Entity case class E1(..params..) extends Entity cas…
23 сен '15 в 21:31
0
ответов
Почему невозможно иметь контравариантные типы возврата
Я играю с дженериками в Java, и я нашел кое-что странное: Следующее компилирует: public static <A, B extends A> B reduce(Function2<A, A, B> func) { //code doesn't matter } Но следующее не делает: public static <A, B super A> B redu…
06 май '14 в 17:45
1
ответ
VB.NET реализовать несколько контравариантных типов интерфейса
Основной вопрос: При наличии интерфейса: ICopiesFrom(Of In TModel), где нет ограничения по типу для универсального аргумента, может ли этот интерфейс быть реализован более одного раза для одного и того же конкретного типа с использованием аргумента …
28 май '14 в 13:37
4
ответа
Ковариантность и Контравариантность в C#
Начну с того, что я являюсь Java-разработчиком, который учится программировать на C#. Поэтому я делаю сравнения того, что я знаю, с тем, что я изучаю. Я играю с дженериками C# уже несколько часов, и мне удалось воспроизвести те же вещи, которые я зн…
21 мар '12 в 14:02
1
ответ
Обнаружение отклонений от общих параметров типа интерфейсов
Есть ли способ отразить на интерфейсе, чтобы обнаружить отклонение от его параметров общего типа и возвращаемых типов? Другими словами, могу ли я использовать отражение, чтобы различать два интерфейса: interface IVariant<out R, in A> { R DoSom…
20 май '10 в 09:27
1
ответ
Autofac контравариантность и разрешение открытых универсальных типов
При разрешении всех реализаций универсального типа (с контравариантным T) из autofac я хотел бы получить все возможные контравариантные совпадения. Это работает только при регистрации ContravariantRegistrationSource. Но потом я получаю слишком много…
28 сен '17 в 08:52
0
ответов
Есть ли шаблон, который охватывает этот случай специализации
Рассмотрим этот случай специализации, когда менее специализированному классу требуется доступ к объекту типа интерфейса, но более специализированному классу требуется доступ к конкретной реализации этого интерфейса: class IPropulsionMechanism { publ…
10 май '16 в 03:32
1
ответ
Как получить ограниченные символы в Java?
В статье википедии о со-и контравариантности есть пример использования, а затем пояснительное предложение, описывающее, что означает объявление типа. Я считаю это чрезвычайно полезным. Прочитав объяснение несколько раз, я чувствую, что понимаю, что …
14 мар '17 в 22:53
1
ответ
Назначьте подкласс для интерфейса с использованием обобщенных и ковариантных элементов
Я определил 3 интерфейса: public interface IManufacturerInput { } public interface IManufacturerOutput { } public interface IManufacturerApi<in S, out T> where S : IManufacturerInput where T : IManufacturerOutput { T Calculate(S); } И я опреде…
30 мар '17 в 08:49
2
ответа
Проблема ковариации в C#
У меня есть класс, объявленный так: internal private abstract class BoxGroup<TS> : 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<T> { T h(); } public class SomeOtherClass<T> : B<T> { public T h() { return default(T); } } public class Trial { static void Main() { SomeOt…
17 янв '16 в 06:04