lý do thực sự cho giới hạn đó là gì? Nó chỉ là công việc phải được thực hiện? Là khái niệm khó? Nó là bất khả thi?Tại sao C# (4.0) không cho phép đồng và contravariance trong các loại lớp chung?
Chắc chắn, người ta không thể sử dụng các tham số kiểu trong các trường, vì chúng là đọc-ghi allways. Nhưng đó không thể là câu trả lời, phải không?
Lý do cho câu hỏi này là tôi đang viết một bài viết về hỗ trợ phương sai trong C# 4, và tôi cảm thấy rằng tôi nên giải thích tại sao nó bị hạn chế đối với các đại biểu và giao diện. Chỉ để đảo ngược hậu quả của bằng chứng.
Cập nhật: Eric đã hỏi về một ví dụ.
gì về điều này (không biết nếu điều đó có ý nghĩa, tuy nhiên :-))
public class Lookup<out T> where T : Animal {
public T Find(string name) {
Animal a = _cache.FindAnimalByName(name);
return a as T;
}
}
var findReptiles = new Lookup<Reptile>();
Lookup<Animal> findAnimals = findReptiles;
Lý do cho việc đó trong một lớp có thể là bộ nhớ cache mà được tổ chức trong lớp chính nó. Và xin vui lòng không đặt tên cho loại vật nuôi khác nhau của bạn giống nhau!
BTW, đây mang lại cho tôi để optional type parameters in C# 5.0 :-)
Cập nhật 2: Tôi không tuyên bố CLR và C# nên cho phép điều này. Chỉ cần cố gắng hiểu những gì đã dẫn đến điều đó nó không.
Chắc chắn, đó là một ví dụ hợp lý nhưng bạn chưa thể hiện bất kỳ điều gì cũng không thể thực hiện được với giao diện. Chỉ cần tạo giao diện ILookup và có Tra cứu thực hiện nó. Lợi ích bổ sung hấp dẫn nào so với phương sai giao diện trong trường hợp của bạn cho phương sai lớp thêm? –
Không, thực sự. Bên cạnh đó nó là ít mã. Hãy để tôi đảo ngược hậu quả của bằng chứng. Làm thế nào chúng ta có thể giải thích tại sao nó không được hỗ trợ. Tôi không yêu cầu thực hiện nó, thực sự. "Nó luôn luôn là như vậy" không tính! :-) –
Chúng tôi không phải cung cấp một biện minh cho * không * triển khai tính năng. Không triển khai tính năng là * miễn phí *. Thay vào đó, chúng tôi phải cung cấp một biện minh cho việc thực hiện một tính năng - tính năng có thể tốn hàng triệu đô la cho Microsoft và áp đặt gánh nặng lớn hơn cho khách hàng của chúng tôi, những người phải dành thời gian và tiền bạc để tìm hiểu về tính năng này. –