重写方法中的默认参数值

时间:2012-08-07 21:02:03

标签: c# .net override virtual optional-parameters

在下面的代码中,对Method2的调用接收Value参数为False,即使基类根本没有声明参数的默认值,派生类也默认声明为True。
可以认为(正如在类似的例子中所做的那样:C# optional parameters on overridden methods)编译器首先使用基类的方法声明(这是正确的,因为可以通过使用{前缀调用Method1前缀来更改此行为{1}}),但在这种情况下,基数根本不会声明默认值。
对此有合理的解释吗?

this.

输出:

Call to Method1, expected: True, got: True
Call to Method2, expected: True, got: False

3 个答案:

答案 0 :(得分:1)

看起来这是一种错误。

以下是你们正在谈论的链接,我认为它来自今年早些时候:

C# optional parameters on overridden methods

答案 1 :(得分:1)

您的问题似乎与其他问题有关,这可能会对您有所帮助:Ambiguity with inheriting an optional-parameter base method

答案 2 :(得分:1)

我刚刚安装了Visual Studio 2012 RTM,即使在为Framework 3.5或2.0编译时,相同的代码也按预期工作。 显然这是一个编译器问题,而不是.Net Framework 1,并且已在新版本的C#编译器中得到修复。