开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜