Trong đoạn mã dưới đây:Câu hỏi về C# hiệp phương sai
interface I1 { }
class CI1: I1 { }
List<CI1> listOfCI1 = new List<CI1>();
IEnumerable<I1> enumerableOfI1 = listOfCI1; //this works
IList<I1> listofI1 = listOfCI1; //this does not
tôi có thể gán tôi "listOfCI1" đến một IEnumerable<I1>
(do hiệp phương sai)
Nhưng tại sao tôi lại không thể gán nó vào an IList<I1>
? Cho rằng vấn đề, tôi thậm chí không thể làm như sau:
List<I1> listOfI12 = listOfCI1;
nên không hiệp phương sai cho phép tôi để gán một loại có nguồn gốc đến một loại cơ sở?
Btw, cuộc trò chuyện đó thật tuyệt vời. –
@Arnis: Cảm ơn bạn - Tôi rất thích nó, ngay cả khi tôi không thể hiển thị video Hokey Cokey mà tôi đã ghi lại ... –
Jon, nhóm BCL cũng đã thêm (IEnumerable: IEnumerable), bởi vì IEnumerable không cho phép bạn thêm bất kỳ thành viên mới (tức là bất biến của nó) làm cho nó an toàn. Nhưng mặt khác đã không thêm "ra" trên IList vì nó là mutable (làm cho nó có thể thêm một thực hiện khác nhau vào danh sách cơ bản?) –