C # Именованные параметры, Наследование и перегрузка сюрприз - PullRequest
6 голосов
/ 10 июня 2011

Я проходил презентацию, касающуюся 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

Я искал в сети, чтобы найти ответ, но все еще не мог найти его.Кто-нибудь может это объяснить?

1 Ответ

3 голосов
/ 10 июня 2011

Причина, по-видимому, следующая: вы звоните Foo на Base, поэтому имена параметров берутся из Base.Foo. Поскольку x является первым параметром, а y - вторым параметром, этот порядок будет использоваться при передаче значений в переопределенный метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...