Tôi không rõ lý do tại sao đoạn mã sau đây không phải là covarient?Tại sao C# ra các thông số kiểu chung vi phạm hiệp phương sai?
public interface IResourceColl<out T> : IEnumerable<T> where T : IResource {
int Count { get; }
T this[int index] { get; }
bool TryGetValue(string SUID, out T obj); // Error here?
}
Lỗi 1 đúng không hợp lệ: Các tham số kiểu 'T' phải invariantly hợp lệ về 'IResourceColl.TryGetValue (string, ra T)'. 'T' là covariant.
Giao diện của tôi chỉ sử dụng thông số mẫu ở vị trí đầu ra. Tôi có thể dễ dàng cấu trúc lại mã này vào một cái gì đó giống như
public interface IResourceColl<out T> : IEnumerable<T> where T : class, IResource {
int Count { get; }
T this[int index] { get; }
T TryGetValue(string SUID); // return null if not found
}
nhưng tôi đang cố gắng để hiểu nếu mã ban đầu của tôi thực sự vi phạm hiệp phương sai hoặc nếu đây là một trình biên dịch hoặc .NET giới hạn của hiệp phương sai.
có thể trùng lặp [C#: Tại sao không 'ref' và 'out' đa hình hỗ trợ?] (Http: // stackoverflow. com/questions/1207144/c-sharp-why-doesnt-ref-and-out-hỗ trợ-đa hình) – Jon
Điều quan trọng cần lưu ý ở đây là ['out'] (http://msdn.microsoft.com/vi -us/library/ee332485.aspx) (bộ sửa đổi tham số) hoàn toàn không liên quan đến ['out'] (http://msdn.microsoft.com/en-us/library/dd469487.aspx) (được sử dụng trên một kiểu generic) tham số). – Jon
@Jon - câu hỏi đó áp dụng cho C# 3.0 và trước đó. Cú pháp được mô tả ở đây là C# 4.0 – Oded