2012-12-30 29 views
6

dưới đây ví dụ biên dịch tốt ở thường xuyên Mono 2.10.9:MonoTouch và hỗ trợ biến giao diện chung

namespace covarianttest 
{ 
    public interface ITest<out T> : IEnumerable<T> 
    { 
    } 
} 

Tuy nhiên khi tôi cố gắng biên dịch nó chống lại MonoTouch 6.0.8 tôi nhận được lỗi này:

Lỗi CS1961 : Tham số kiểu biến thể 'T' phải có giá trị bất biến hợp lệ trên 'covarianttest.ITest'

Vì vậy, tôi có cho rằng MonoTouch không hỗ trợ mở rộng giao diện chung biến thể/contravariant chưa? Nếu vậy đề nghị giải pháp cho tình huống này trong MonoTouch là gì?

Trả lời

6

Điều này thực sự phụ thuộc vào trình biên dịch (và hồ sơ/thời gian chạy) không phải là phiên bản Mono. IOW một số điều có thể làm việc trên Mono 2.10 và không phải với MonoTouch 6.x.

Phiên bản hiện tại của tàu MonoTouch với trình biên dịch smcs và cấu hình dựa trên 2.1 (chủ yếu là Silverlight và một số bổ sung .NET 4.0).

Các tính năng mới hơn, như hiệp phương sai, yêu cầu trình biên dịch 4.0 đầy đủ (ví dụ: dmcs trong Mono 2.10 hoặc mcs trong Mono 3.0) và thời gian chạy.

Phiên bản tương lai của MonoTouch (có thể là mùa xuân này với alpha/beta vào đầu năm 2013) sẽ cung cấp trình chạy và trình biên dịch 4.0/4.5.

+0

Vì vậy, bạn đang nói rằng MonoTouch không hỗ trợ Co/Contra-variance tại thời điểm này và đôi khi có thể trong tương lai chính xác? –

+0

Có, hầu hết các tính năng .NET/CLR 4.x không được ** có sẵn trong MonoTouch nhưng chúng sẽ trở nên khả dụng khi MT được khởi động lại trên Mono 3.0 (và trình biên dịch 'mcs' mới). – poupou

+0

Cảm ơn @poupou! –

Các vấn đề liên quan