I was going through some presentation regarding C# 4.0 and in the end the presenter posted a quiz with the following code.
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
I couldn’t figure out why that output is produced (problem of reading the presentation offline without the presenter). I was expecting
D x:0, y:1
I searched the net to find the answer but still couldn’t find it. Can some one explain this?
The reason seems to be the following: You are calling
FooonBase, so it takes the parameter names fromBase.Foo. Becausexis the first parameter andyis the second parameter, this order will be used when passing the values to the overriden method.