|
29 / 31 / 2
Регистрация: 14.04.2012
Сообщений: 152
|
||||||
Ковариантность и Контрвариантность - что это?08.09.2012, 15:12. Показов 13439. Ответов 10
Метки нет (Все метки)
Прошу помочь мне объяснить эти два понятия, ещё читая Шилдта не понял, что эта за возможность такая, а теперь столкнулся c подобными темами в другой книге, например:
Ковариантность обобщенных интерфейсов:
А уж к контрвариантности обобщенных интерфейсов я и переходить боюсь, застрял на этом теме уже дней 5.Может, вся проблема в том, что я не очень понимаю суть этих 2 магических понятий.
1
|
||||||
| 08.09.2012, 15:12 | |
|
Ответы с готовыми решениями:
10
Ковариантность и контрвариантность
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||||||||||
| 08.09.2012, 16:02 | |||||||||||
Сообщение было отмечено как решение
Решение
О да, на этой теме много у кого крышу сносит
![]() Ковариантность: Если есть некий класс Б, унаследованный от класса А, то обобщенный интерфейс Х<T> называется ковариантным в том случае, если экземпляр интерфейса Х<Б> можно привести к типу X<A>. Чтобы обобщенный интерфейс сделать ковариантным, нужно параметру типа приписать оператор out - это гарантирует, что экземпляр указанного типа в любом методе интерфейса может быть только выходным параметром, но никак не входным:
Если имеется некий класс Б, унаследованный от класса А, то обобщенный интерфейс X<T> называется контрвариантным в том случае, если экземпляр интерфейса X<A> можно привести к типу X<Б>. Обеспечивается это параметром in перед обобщенным типом и гарантирует, что экземпляры этого типа в любом из методов интерфейса могут служить лишь входными параметрами, но никак не выходными:
16
|
|||||||||||
|
29 / 31 / 2
Регистрация: 14.04.2012
Сообщений: 152
|
|
| 08.09.2012, 16:08 [ТС] | |
|
Спасибо большое, прям таки обрадовался, как увидел ваш ник снизу.
1
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||||||||||||||||||||
| 08.09.2012, 16:10 | |||||||||||||||||||||
Сообщение было отмечено как решение
Решение
На вашем примере с фигурами.
Предположим, что ковариантность соблюдается без всяких дополнительных условий, то есть интерфейс может иметь такой вид (обратите внимание на добавленный set):
До четвертого фреймворка такие пляски бы не вышли, потому что для сохранения этой строгой типизации компилятор запрещает подобное приведение типов. С появлением вариативности мы параметром out заверяем компилятор: не парься, родной, если кто-то попытается привести этот интерфейс к родительскому - они могут только доставать элементы (которые можно без проблем привести к родительским), но не могут их туда пихать, потому все пучком, никто не сможет круг засунуть в коллекцию прямоугольников - инфа 100%. Ну а контрвариантность - строго наоборот: можно пихать экземпляры дочерних классов в интерфейс базового класса, т.к. любой дочерний класс без проблем можно привести к базовому:
Ну, может кому пригодится.
10
|
|||||||||||||||||||||
|
Неадекват
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
|
|
| 08.09.2012, 16:14 | |
|
Можно добавить, что работают сии чудеса только в шарпе 3.0 и выше.
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 08.09.2012, 16:17 | |
|
1
|
|
|
Неадекват
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
|
||
| 08.09.2012, 16:19 | ||
|
Ммм, с 3.0 CLR не обновлялась, запустить код fw4 можно и на fw3
Таким же образом как и порт fw3.5 под fw2
1
|
||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 08.09.2012, 16:34 | ||
|
Почему-то у меня стойкое ощущение, что вывалится InvalidCastException.
2
|
||
|
4 / 4 / 1
Регистрация: 20.01.2010
Сообщений: 93
|
||
| 31.12.2013, 21:13 | ||
|
1. зачем получать ссылки интерфейсов на реализующие их классы? 2. зачем получать ссылки интерфейсов на реализующие их классы, используя при этом ко\контрвариантность? P.s. вижу, что тема старая, но для меня сейчас очень актуальная
0
|
||
|
0 / 0 / 0
Регистрация: 12.09.2016
Сообщений: 1
|
|
| 26.11.2016, 13:40 | |
|
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 26.11.2016, 15:33 | ||
|
Ссылки на интерфейсы не нужно получать, но зачастую их приходится использовать — когда либо вам из какой-то сторонней системы приходит только ссылка на интерфейс, либо какая-то сторонняя система (класс), который вы хотите использовать, принимает только ссылку на интерфейс.
0
|
||
| 26.11.2016, 15:33 | |
|
Помогаю со студенческими работами здесь
11
mc68hc908 - это что это, это с чем это ?? Не могу понять, что это за реализация ORM и как это работает При загрузке компа появляется это, не знаете что это и как исправить Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
|
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию.
2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
|
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
|
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO
Апнулись до NET10.
Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта
так и в интерактивном режиме. из сложностей - чисто функциональный подход.
Решил. . .
|
|
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2.
Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники".
В. . .
|
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии.
. . .
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|