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