2012-12-30 3 views
6

以下の例は、通常のモノラル2.10.9に罰金コンパイル:MonoTouchでとサポート変種の汎用インターフェース

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

私はMonoTouchで6.0.8に対してそれをコンパイルしようとすると、しかし、私はこのエラーが表示されます。

エラーCS1961 :共変型のパラメータ 'T'は 'covarianttest.ITest'で不変に有効でなければなりません

したがって、私はMonoTouchが共変/反変一般ジェネリックインターフェースをまだ拡張していないと仮定しますか?もしそうならMonoTouchでこのような状況のための推奨される回避策は何ですか?

答えて

6

これは実際にはMonoバージョンではなくコンパイラ(およびプロファイル/ランタイム)によって異なります。 Io Mono 2.10では動作し、MonoTouch 6.xでは動作しないものもあります。

現在のバージョンのMonoTouchは、smcsコンパイラと2.1ベースのプロファイル(ほとんどの場合、Silverlightと.NET 4.0の一部が追加されています)を搭載しています。

共分散のような新しい機能では、完全な4.0コンパイラ(Mono 2.10の場合はdmcs、Mono 2.10の場合はmcs)とランタイムが必要です。

将来のバージョンのMonoTouch(2013年初めにアルファ/ベータ版のこの春バージョン)は、4.0/4.5ランタイムとコンパイラを提供します。

+0

MonoTouchは現時点でコ・コントラバリエーションをサポートしておらず、将来はいつか正しいと言いますか? –

+0

はい、ほとんどの.NET/CLR 4.xの機能はまだMonoTouchでは利用できませんが、MTがMono 3.0(および新しい 'mcs'コンパイラ)にリベースされると利用可能になります。 – poupou

+0

ありがとう@poupou! –

関連する問題