Хорошо, я немного читал эту тему на stackoverflow, смотрел это и это, но все еще немного запутался по поводу co/contra-дисперсии.
Ковариация позволяет заменять "больший" (менее конкретный) тип в API, где исходный тип используется только в позиции "вывода" (например, в качестве возвращаемого значения). Контравариантность позволяет заменить "меньший" (более конкретный) тип в API, где исходный тип используется только в позиции "ввода".
я знаю, что это связано с безопасностью типов.
о входе in/out
. Могу ли я сказать, я использую in
когда мне нужно написать к ней, и out
когда его только для чтения. и in
средствах противоречие, out
совпадения. но из объяснения выше...
и здесь
Например,
List<Banana>
нельзя рассматривать какList<Fruit>
посколькуlist.Add(new Apple())
действителен для List, но не дляList<Banana>
.
Так не должно быть, если я собираюсь использовать in
/собираюсь записать объект, он должен быть больше, более общим.
Я знаю, что этот вопрос был задан, но все еще очень запутан.