Я встретил их в учебнике, который я читаю на С#, но мне трудно понять их, возможно, из-за отсутствия контекста.
Есть ли хорошее краткое объяснение того, что они собой представляют и что они полезны там?
Изменить для пояснения:
Ковариантный интерфейс:
interface IBibble<out T>
.
.
Контравариантный интерфейс:
interface IBibble<in T>
.
.