Với giao diện này huyền diệu:Trong C# 4.0 tại sao không thể tham số ngoài trong một phương thức là biến thể?
public interface IHat<out TRabbit>
{
TRabbit Take();
}
Và hệ thống phân cấp lớp này:
public class Rabbit { }
public class WhiteRabbit : Rabbit { }
bây giờ tôi có thể biên dịch này:
IHat<WhiteRabbit> hat1 = null;
IHat<Rabbit> hat2 = hat1;
Đó là tuyệt vời. Nhưng nếu tôi xác định giao diện khác nhau:
public interface IHat<out TRabbit>
{
bool Take(out TRabbit r);
}
tôi chỉ ra rằng chiếc mũ có thể trống rỗng, sử dụng một giá trị trả về boolean riêng biệt (các phiên bản trước sẽ có lẽ đã trở về một con thỏ null từ một chiếc mũ trống). Nhưng tôi vẫn chỉ xuất hiện một con thỏ, do đó, không làm bất cứ điều gì một cách hợp lý khác với phiên bản trước.
Trình biên dịch C# 4.0 trong CTP đưa ra một lỗi trong định nghĩa giao diện - nó yêu cầu tham số phương thức 'out' là một kiểu bất biến. Có một lý do cứng nhắc và nhanh chóng tại sao điều này không được phép hay là một thứ có thể được giải quyết trong một phiên bản tương lai?
Để biết thông tin, tôi đã tìm thấy nhiều blog, v.v ... nhưng không có nhận xét nào là từ nguồn MS chính thức. Tôi khá tự tin nó là chính xác, mặc dù ... phương sai C# 4.0 vẫn dựa trên các quy tắc CLI. –
Nghe có vẻ đủ rồi! –