2012-03-30 8 views
0

私はちょうどVS2010での単純なプロジェクト、C#のDOTNET 3.5vs2008とvs2010のパブリックインターフェイスの違いは?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace Business.Util 
{ 
     public interface ICalculateCurrent<in T1, in T2, in T3, in T4> 
     { 
      bool GetValue(T1 obj1, T2 obj2, T3 obj3, T4 obj4); 
     } 

     public static class test 
     { 
      static void Main(string[] args) 
      { 

      } 
     } 
} 

ファインを作成し、現時点では何もするが、それはコンパイルされません。

次に、VS2008でこれをやりたかったことを実感して、dotnet3.5全く同じコードを作成しましたが、インターフェイスに関するエラーは発生しません。

Invalid token 'in' in class, struct, or interface member declaration 
Type expected 
Invalid token ',' in class, struct, or interface member declaration 
Invalid token ',' in class, struct, or interface member declaration 
Invalid token ',' in class, struct, or interface member declaration 
Invalid token '>' in class, struct, or interface member declaration 

プロジェクトの参照は両方とも同じです。私はこれで何が欠けているのですか?

ありがとうございました。

+0

あまりにも甘いことではなく、特定のコードサンプルがコンパイルされるかどうかは、使用しているテキストエディタのバージョンではなく、使用しているコンパイラのバージョンによって異なります。コンパイラの新しいバージョンとほぼ同じ時期に異なるエディタがリリースされることは、実際には同等のものにはなりません。 – Servy

答えて

6

バリエーションインターフェイスには、VS2010バージョンのC#コンパイラが必要です。 .NET 3.5をターゲットにしていても、まだ新しいコンパイラを使用していました。

VS2008でこれを行う方法はありません。申し訳ありません。 .NET 3.5にはバリアントインターフェイスのランタイムサポートが含まれていますが、古いC#コンパイラではサポートされていません。

インターフェイス分散を使用していない場合は、inをその行に4回すべて削除してください。

+0

はい、正しい回答 - VS/IDE、C#と.NETとCLRのバージョン(http://csharpindepth.com/articles/chapter1/versions.aspx)の間に大きな混乱があります。 – NSGaga

+0

説明をありがとうございました –

4

inジェネリックスのキーワードがVS10に追加されました。 hereを読んでください。

+2

実際は、。 NETは、長い間、一般的なパラメータの分散をサポートしています。それはVS2010までなかったC#コンパイラです。 –

+0

私はすでに私の答えを編集していました。ほとんどの人がvs10 w/4.0を使用していて、w/3.5ではなく、これを忘れています。しかし、これを指摘してくれてありがとう。 – payo

1

outinキーワードので、共変と反変のジェネリック型パラメータ は(VS 2010で配信)C#4.0の新機能です。

+1

'in'と' out'キーワードはC#の一部であり、.NET Frameworkではありません。 .NET Framework(実際にはCLR)は、2.x –

+0

以降、汎用ジェネリックインターフェースをサポートしています。以前のバージョンのフレームワークをターゲットにすることができるので、 'in'と' out'キーワードを使用しています。 –

関連する問題