2012-12-30 15 views
6

Le seguito esempio compila bene nel regolare Mono 2.10.9:MonoTouch e varianti supportare interfacce generiche

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

Tuttavia quando tento compilare contro MonoTouch 6.0.8 I ricevono questo errore: CS1961

errore : Il parametro covariante di tipo "T" deve essere invariantly valido su "covarianttest.ITest"

Quindi suppongo che MonoTouch non supporti ancora l'estensione di interfacce generiche covarianti/controvarianti? In tal caso, qual è la soluzione consigliata per questa situazione in MonoTouch?

risposta

6

Questo in realtà dipende dal compilatore (e dal profilo/runtime) non dalla versione Mono. Alcune cose potrebbero funzionare su Mono 2.10 e non con MonoTouch 6.x.

Le versioni correnti di MonoTouch vengono fornite con il compilatore smcs e un profilo basato su 2.1 (principalmente Silverlight e alcune aggiunte a .NET 4.0).

Le funzionalità più recenti, come la covarianza, richiedono un compilatore completo di 4.0 (ad esempio dmcs in Mono 2.10 o mcs in Mono 3.0) e runtime.

Le versioni future di MonoTouch (probabilmente questa primavera con alpha/beta all'inizio del 2013) forniranno un runtime e un compilatore 4.0/4.5.

+0

Quindi stai dicendo che MonoTouch non supporta Co/Contra-varianza in questo momento, e in futuro potrebbe essere corretto? –

+0

Sì, la maggior parte delle funzioni .NET/CLR 4.x non sono ** ancora ** disponibili in MonoTouch, ma saranno disponibili una volta che MT è stato ridefinito su Mono 3.0 (e il nuovo compilatore 'mcs'). – poupou

+0

Grazie a @poupou! –

Problemi correlati