为什么这个返回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;
}
答案 0 :(得分:3)
我认为这只能通过查看C#语言规范来回答。第7.5.3.2节说,在确定“更好”的函数成员时,如果不需要可选参数,则将它们抛出:
从中删除没有相应参数的可选参数 参数列表
这有效地使两个功能等效。然后,当两个函数等效时,它具有以下平局规则:
否则,如果MP的所有参数都有相应的参数 而默认参数需要替换至少一个 MQ中的可选参数,然后MP优于MQ。
这意味着没有默认参数的那个将是被调用的那个 - 正如你在代码中看到的那样。
答案 1 :(得分:0)
根据我的经验,方法要么过载要么使用默认参数。这是一个设计选择,虽然我发现自己编写重载方法而不是默认参数化方法。
在这种情况下,编译器必须决定调用哪个方法,并且优先考虑没有任何参数的方法。
答案 2 :(得分:0)
它返回5,因为您调用了一个没有参数的方法add()
。编译器应该如何基于具有默认参数的编译器知道您想要哪一个?它必须选一个。这就是设计工作的方式。
如果你想阅读更多关于可选参数的信息,我建议你阅读Eric Lippert的系列文章。您可以启动here。