2012-12-30 9 views
6

Das folgende Beispiel in regelmäßigen Mono fein kompiliert 2.10.9:Monotouch und Unterstützung Variante generische Schnittstellen

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

Allerdings, wenn ich kompilieren versuchen, es gegen Monotouch 6.0.8 erhalte ich diesen Fehler:

Fehler CS1961 : Der kovariante Typparameter 'T' muss für 'covarianttest.ITest' immer gültig sein.

Also soll ich annehmen, dass MonoTouch die Erweiterung kovarianter/kontravarianter generischer Schnittstellen noch nicht unterstützt? Wenn ja, was ist die empfohlene Problemumgehung für diese Situation in MonoTouch?

Antwort

6

Dies hängt eigentlich vom Compiler (und Profil/Runtime) nicht von der Mono-Version ab. Iow einige Dinge könnten auf Mono 2.10 und nicht mit MonoTouch 6.x funktionieren.

Aktuelle Versionen von MonoTouch werden mit dem Compiler smcs und einem 2.1-basierten Profil (hauptsächlich Silverlight und einige .NET 4.0-Ergänzungen) ausgeliefert.

Neuere Funktionen, wie Kovarianz, erfordert einen vollständigen 4.0-Compiler (z. B. dmcs in Mono 2.10 oder mcs in Mono 3.0) und Laufzeit.

Zukünftige Versionen von MonoTouch (voraussichtlich in diesem Frühjahr mit Alpha/Beta Anfang 2013) werden eine 4.0/4.5-Laufzeit und Compiler bieten.

+0

Sie sagen also, dass MonoTouch keine Co/Contra-Varianz zu diesem Zeitpunkt unterstützt, und es möglicherweise irgendwann in der Zukunft korrigieren? –

+0

Ja, die meisten .NET/CLR 4.x-Funktionen sind in MonoTouch ** noch nicht ** verfügbar, aber sie werden verfügbar, sobald MT auf Mono 3.0 (und dem neuen 'mcs'-Compiler) rebasiert wird. – poupou

+0

Danke @poupou! –

Verwandte Themen