Именованные параметры C #, сюрприз наследования и перегрузки

Я читал некоторую презентацию о 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

, что поискал в сети ответ, но все равно не нашел. Кто-нибудь может это объяснить?

6
задан ferosekhanj 10 June 2011 в 11:13
поделиться