C# Named parameters, Inheritance and overloading surprise
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();
开发者_如何学JAVA 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 Foo
on Base
, so it takes the parameter names from Base.Foo
. Because x
is the first parameter and y
is the second parameter, this order will be used when passing the values to the overriden method.
精彩评论