2

なぜこれが5を返すのか、私はこれについて興味があります。通常の関数は、デフォルトのパラメーター1よりも優先されます。誰かが私にこれを説明できますか?前もって感謝します

static void Main(string[] args)
{
        Console.WriteLine(add());

        Console.ReadLine();
}



public static int add(int x=4,int y=5)
{
        return x+y;
}

public static int add()
{

        return 5;

}
4

3 に答える 3

3

これは、C#の言語仕様を見ることによってのみ答えられると思います。セクション7.5.3.2は、「より良い」関数メンバーを決定するときに、オプションの引数が必要ない場合は、それらを破棄すると述べています。

対応する引数のないオプションのパラメータは、パラメータリストから削除されます

これにより、2つの機能が実質的に同等になります。次に、2つの関数が同等である場合の次のタイブレーカールールがあります。

それ以外の場合、MPのすべてのパラメーターに対応する引数があり、MQの少なくとも1つのオプションのパラメーターをデフォルトの引数に置き換える必要がある場合、MPはMQよりも優れています。

つまり、デフォルトの引数がないものは、コードで見ているように、呼び出されたものになります。

于 2012-06-19T20:06:55.713 に答える
0

私の経験では、メソッドはオーバーロードされているか、デフォルトのパラメーターを使用しています。これは設計上の選択ですが、デフォルトのパラメーター化されたメソッドではなく、オーバーロードされたメソッドを記述していることに気付きました。

この場合、コンパイラーは呼び出すメソッドを決定する必要があり、パラメーターのないメソッドが優先されます。

于 2012-06-19T20:05:18.490 に答える
0

パラメータなしでメソッドadd()を呼び出したため、5が返されます。コンパイラは、デフォルトのパラメータを持つものに基づいて、必要なものをどのように知る必要がありますか?1つ選ぶ必要があります。それが機能するように設計された方法です。

オプションの引数について詳しく知りたい場合は、EricLippertのシリーズを読むことをお勧めします。ここから始めることができます。

于 2012-06-19T20:08:49.893 に答える