В приведенном ниже коде:Вопрос о C# ковариации
interface I1 { }
class CI1: I1 { }
List<CI1> listOfCI1 = new List<CI1>();
IEnumerable<I1> enumerableOfI1 = listOfCI1; //this works
IList<I1> listofI1 = listOfCI1; //this does not
Я могу назначить свой «listOfCI1» к IEnumerable<I1>
(вследствие ковариации)
Но почему я не в состоянии назначить его a IList<I1>
? на то пошло, я даже не могу сделать следующее:
List<I1> listOfI12 = listOfCI1;
не должны ковариации позволяют мне присвоить производный тип к базовому типу?
Btw, этот разговор был замечательный. –
@Arnis: Спасибо. Мне понравилось это, даже если я не смог показать видео Hokey Cokey, которое записал ... –
Jon, так и команда BCL добавила (IEnumerable: IEnumerable), потому что IEnumerable не позволяет добавлять новые члены (т. Е. Его непреложный), что делает его безопасным. Но с другой стороны не добавили «out» на IList , потому что он изменен (позволяет добавить другую реализацию в базовый список?) –