Оглавление
Ковариация и контравариантность (информатика)
-
Основы дисперсии
- Дисперсия описывает, как типы данных изменяются в зависимости от контекста.
- В языках с множественной диспетчеризацией типы данных могут быть ковариантными или контравариантными.
- Ковариантные типы данных могут быть преобразованы в более конкретные типы, в то время как контравариантные типы данных могут быть преобразованы в менее конкретные типы.
-
Примеры и правила
- В Java и C# методы могут быть переопределены, но типы параметров должны быть совместимы.
- В C# универсальные типы могут быть помечены как ковариантные, контравариантные или инвариантные.
- В Scala и Kotlin универсальные типы могут быть помечены как ковариантные или контравариантные.
-
Отклонения и наследование
- В языках с аннотациями о различиях в местах объявления можно комментировать различия в типах параметров.
- В языках с аннотациями об отклонениях от места использования можно комментировать места создания экземпляров универсальных типов.
-
Универсальные типы и интерфейсы
- В C# параметры типа интерфейса могут быть ковариантными, контравариантными или инвариантными.
- В Scala, Kotlin и OCaml типы данных списков являются ковариантными.
- В OCaml можно явно указывать различия в типах данных.
-
Примечания к вариантам использования
- Подход на основе объявления сайта может привести к необходимости делать интерфейсы инвариантными.
- Дополнительные интерфейсы могут быть использованы для выявления большего количества различий, но это может быть громоздким.
- Пересказана только часть статьи. Для продолжения перейдите к чтению оригинала.
Полный текст статьи: