Выбор ответа Middle Дженерики обновлено
Ковариантность IEnumerable<out T>
Вопрос
Какая строка скомпилируется?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: IEnumerable<object a = new List<string();. IEnumerable<out T ковариантен: последовательность строк можно читать как последовательность объектов, поэтому первая строка работает.
Варианты ответа
List<object> b = new List<string>();IList<object> c = new List<string>();IEnumerable<object> d = new List<int>();IEnumerable<object> a = new List<string>();правильный ответ
Разбор
IEnumerable<out T> ковариантен: последовательность строк можно читать как последовательность объектов, поэтому первая строка работает. List<T> это класс, а вариантность есть только у интерфейсов и делегатов. IList<T> инвариантен: через него можно записать object в список строк. Для int вариантность не работает: она поддерживается только для ссылочных типов, ведь int пришлось бы упаковать.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.