C# как работает явное приведение с дженериками во время компиляции?
Привет. Я экспериментировал с концепцией ковариации в универсальных интерфейсах и наткнулся на то, о чем хочу вас спросить
Я знаю, что этот код не будет работать:
List<Base> randomList = new List<Derived>();
Это не работает, потому что они отличаются своими общими параметрами.
Этот код также не будет работать:
IList<Derived> derived = new List<Derived>(); IList <Base> basee = derived;
Но если я сделаю гипс:
IList <Base> basee = (IList<Base>)derived;
Компилятор не будет жаловаться. Я знаю, что он потерпит неудачу во время выполнения, потому что списки не поддерживают ковариацию, но здесь я спрашиваю о том, почему это приведение разрешено.
На что смотрит компилятор, решая, разрешено ли приведение или нет?
Что я уже пробовал:
Попытался найти ответ в Microsoft Docs, но они не говорили о явном кастинге в терминах дженериков.