6

私は C# 4.0 に関するプレゼンテーションを行っていましたが、最後にプレゼンターが次のコードでクイズを投稿しました。

using System;
class Base {
    public virtual void Foo(int x = 4, int y = 5) {
        Console.WriteLine("B x:{0}, y:{1}", x, y);
    }
}

class Derived : Base {
    public override void Foo(int y = 4, int x = 5) {
        Console.WriteLine("D x:{0}, y:{1}", x, y);
    }
}

class Program {
    static void Main(string[] args) {
        Base b = new Derived();
        b.Foo(y:1,x:0);
    }
}

// The output is 
// D x:1, y:0

その出力が生成される理由がわかりませんでした (プレゼンターなしでプレゼンテーションをオフラインで読む際の問題)。私は期待していました

D x:0, y:1

答えを見つけるためにネットを検索しましたが、まだ見つかりませんでした。誰かがこれを説明できますか?

4

1 に答える 1

3

理由は次のようです。 を呼び出しFooBaseいるため、 からパラメータ名が取得されBase.Fooます。xが最初のパラメーターであり、が 2 番目のパラメーターであるためy、オーバーライドされたメソッドに値を渡すときに、この順序が使用されます。

于 2011-06-10T11:19:02.330 に答える