IEnumerable<T>
là đồng biến thể nhưng nó không hỗ trợ loại giá trị, chỉ là loại tham chiếu. Mã đơn giản dưới đây được biên dịch thành công:
IEnumerable<string> strList = new List<string>();
IEnumerable<object> objList = strList;
Nhưng thay đổi từ string
thành int
sẽ nhận được lỗi biên dịch:
IEnumerable<int> intList = new List<int>();
IEnumerable<object> objList = intList;
Lý do được giải thích trong MSDN :
Phương sai chỉ áp dụng cho các loại tham chiếu; nếu bạn chỉ định một loại giá trị cho tham số loại biến thể, tham số loại đó là bất biến cho loại được xây dựng kết quả.
Tôi đã tìm kiếm và thấy rằng một số câu hỏi đề cập đến lý do là quyền anh giữa loại giá trị và loại tham chiếu . Nhưng nó vẫn không làm sáng tỏ tâm trí của tôi nhiều tại sao đấm bốc là lý do?
Ai đó có thể vui lòng đưa ra một lời giải thích đơn giản và chi tiết tại sao hiệp phương sai và chống chỉ định không hỗ trợ loại giá trị và quyền anh ảnh hưởng đến điều này như thế nào?