2012-12-30 3 views
6

Les exemple ci-dessous en Mono compile bien régulière 2.10.9:MonoTouch et variantes supportant les interfaces génériques

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

Cependant, lorsque je tente de compiler contre MonoTouch 6.0.8 Je reçois cette erreur:

Erreur CS1961 : Le paramètre de type covariant 'T' doit être invariantement valide sur 'covarianttest.ITest'

Donc, dois-je supposer que MonoTouch ne supporte pas encore l'extension d'interfaces génériques covariantes/contravariantes? Si oui, quelle est la solution de contournement recommandée pour cette situation dans MonoTouch?

Répondre

6

Cela dépend en fait du compilateur (et de profile/runtime) et non de la version Mono. IOW certaines choses pourraient fonctionner sur Mono 2.10 et pas avec MonoTouch 6.x.

Les versions actuelles de MonoTouch sont livrées avec le compilateur smcs et un profil basé sur 2.1 (principalement Silverlight et certains ajouts .NET 4.0).

Les nouvelles fonctionnalités, comme la covariance, nécessitent un compilateur 4.0 complet (par exemple dmcs dans Mono 2.10 ou mcs dans Mono 3.0) et runtime.

Les futures versions de MonoTouch (probablement ce printemps avec alpha/bêta début 2013) fourniront un runtime et un compilateur de 4.0/4.5.

+0

Donc, vous dites que MonoTouch ne supporte pas Co/Contra-variance pour le moment, et que ça pourrait être correct dans le futur? –

+0

Oui, la plupart des fonctionnalités .NET/CLR 4.x ne sont pas encore disponibles dans MonoTouch, mais elles seront disponibles une fois que MT sera réinitialisé sur Mono 3.0 (et le nouveau compilateur 'mcs'). – poupou

+0

Merci @poupou! –

Questions connexes