6
我正在通过一些关于C#4.0的演示文稿,最后演示者用以下代码发布了测验。C#命名参数,继承和超载意外
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
我搜索了网络找到答案,但仍无法找到它。有人能解释这一点吗?
这与命名参数无关。了解多态是什么。 – 2011-06-10 14:40:27
问题是任何开发人员都会期望Derived.Foo因多态而被调用。因此,有人认为Derived.Foo中的命名参数将被采用是正常的。但是由于这是运行时多态,编译器使用Base.Foo中的参数名称。 – ferosekhanj 2011-06-13 06:15:38