Xem xét đoạn mã.Hiệp phương sai chung và đối nghịch
IList<String> obj=new List<string>();
IEnumerable<Object> obj1 = obj;
Nhưng nếu tôi viết ICollection<Object> obj2 = obj;
nó sẽ cho tôi một lỗi thời gian biên dịch.
Không thể chuyển đổi hoàn toàn loại '
System.Collections.Generic.IList<string>
' thành 'System.Collections.Generic.ICollection<object>
'.
Tại sao hành vi này từ List<T>
cụ cả IEnumerable<T>
và ICollection<T>
và cũng IList<T>
được định nghĩa là
public interface IList<T> : ICollection<T>, IEnumerable<T>, IEnumerable
{
T this[int index] { get; set; }
int IndexOf(T item);
void Insert(int index, T item);
void RemoveAt(int index);
}
@ dlev.Bạn có thể giải thích thêm một chút nữa không. Điều này làm cho 'IEnumerable 'covariant và' ICollection 'thì không. –
@Ashely Chỉ cập nhật câu trả lời của tôi với thông tin đó. – dlev