2012-12-30 7 views
6

poniższym przykładzie kompiluje grzywny w regularnych Mono 2.10.9:MonoTouch i wariantowe wspieranie ogólnych interfejsy

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

Jednak gdy próbuję skompilować go przed MonoTouch 6.0.8 otrzymuję ten błąd:

Błąd CS1961 : Parametr kowariancyjny typu "T" musi być niezmiennie ważny na "covarianttest.ITest"

Czy mam założyć, że MonoTouch nie obsługuje jeszcze rozszerzonych kowariancyjnych/kontrowersyjnych interfejsów generycznych? Jeśli tak, jakie jest zalecenie obejścia tego problemu w MonoTouch?

Odpowiedz

6

To zależy od kompilatora (i profilu/środowiska wykonawczego), a nie wersji Mono. IOW niektóre rzeczy mogą działać na Mono 2.10, a nie na MonoTouch 6.x.

Obecne wersje statków MonoTouch z kompilatorem smcs i profilem 2.1 (głównie Silverlight i niektóre dodatki .NET 4.0).

Nowsze funkcje, takie jak kowariancja, wymagają pełnego kompilatora 4.0 (np. dmcs w Mono 2.10 lub mcs w Mono 3.0) i środowiska wykonawczego.

Przyszłe wersje MonoTouch (prawdopodobnie na wiosnę z wersją alpha/beta na początku 2013 r.) Zapewnią środowisko wykonawcze i kompilator 4.0/4.5.

+0

Więc mówisz, że MonoTouch nie obsługuje obecnie korelacji Co/Kontra i może kiedyś w przyszłości będzie to poprawne? –

+0

Tak, większość funkcji .NET/CLR 4.x nie jest jeszcze ** dostępna w MonoTouch, ale staną się dostępne, gdy MT zostanie ponownie utworzone na Mono 3.0 (i nowym kompilatorze 'mcs'). – poupou

+0

Dzięki @poupou! –