9

C#4 で導入されたオプションのパラメーターが下位互換性があるかどうかを知りたいです。

簡単な例で私の質問を明確にしましょう。VS2010 の .Net2 で C#4 で次のコードを記述したとします。

public void Foo(int val1, int val2, int val3 = 5){ .... }

コードをコンパイルし、dll を作成して、それを .Net2 上の C#2 / C#3 プロジェクトに参照します。コード エディター (VS2010 以外、たとえば VS2008) では、インテリセンスで何が表示されますか?

  1. 次のような 2 つのオーバーロードされたメソッド:

    public void Foo(int val1, int val2)
    public void Foo(int val1, int val2, int val3)
    
  2. 他のようなもの:

    public void Foo(int val1, int val2, int val3)
    public void Foo(int val1, int val2, int val3 = 5) //VS2008 is not supposed to show this
    

C#2 プロジェクトで C#4 メソッドを呼び出すにはどうすればよいですか?

4

2 に答える 2

10

C# コンパイラはオーバーロードを作成しません。オプションのパラメーターを使用して VB.NET で作成されたメソッドを呼び出しているかのようになります。それらは最初から .NET にありました。C# 2 コンパイラはそれらの処理方法を認識しないため、すべての引数を自分で指定する必要があります。

基本的に、オプションのパラメーターはメソッドの呼び出し方法を変更するだけです。このような方法がある場合:

public void Foo(int x = 10, int y = 20)

そして、あなたはそれを次のように呼びます:

Foo(15);

C# 4 コンパイラは、呼び出し側を次のように変更します。

Foo(15, 20);

C# 2 コンパイラではそれができないため、両方の引数を指定する必要があります。

于 2010-07-13T20:14:18.997 に答える
9

すべてのパラメーターを持つ単一のメソッドが表示されます。

C# 4 および VB のすべてのバージョンのオプション パラメータを持つメソッドは、オプション パラメータとそのデフォルト値を示す CIL メタデータを含む単一のメソッドとしてコンパイルされます。
C# 3 (コンパイラと Visual Studio の IntelliSense の両方) は、このメタデータを無視します。

詳細については、こちらを参照してください。

于 2010-07-13T20:14:25.680 に答える