2

为什么返回 5,我很好奇正常函数比默认参数 1 具有更高的优先级。有人可以向我解释一下吗?提前致谢

static void Main(string[] args)
{
        Console.WriteLine(add());

        Console.ReadLine();
}



public static int add(int x=4,int y=5)
{
        return x+y;
}

public static int add()
{

        return 5;

}
4

3 回答 3

3

我认为这只能通过查看 C# 语言规范来回答。第 7.5.3.2 节说,在确定“更好”的函数成员时,如果不需要可选参数,则将它们丢弃:

从参数列表中删除没有对应参数的可选参数

这有效地使这两个功能等效。然后,当两个函数等效时,它具有以下决胜规则:

否则,如果 MP 的所有参数都有对应的参数,而默认参数需要替换 MQ 中的至少一个可选参数,则 MP 优于 MQ。

这意味着没有默认参数的那个将是被调用的那个 - 正如您在代码中看到的那样。

于 2012-06-19T20:06:55.713 回答
0

它返回 5,因为您调用了一个add()没有参数的方法。编译器应该如何根据带有默认参数的那个来知道你想要哪个?它必须选择一个。这就是它的设计方式。

如果您想了解更多关于可选参数的信息,我建议您阅读 Eric Lippert 的系列文章。你可以从这里开始。

于 2012-06-19T20:08:49.893 回答
0

以我的经验,方法要么被重载,要么使用默认参数。这是一个设计选择,尽管我发现自己编写重载方法而不是默认参数化方法。

在这种情况下,编译器必须决定调用哪个方法,并且没有任何参数的方法优先。

于 2012-06-19T20:05:18.490 回答