优先级默认值还是其他功能? (超载)

时间:2012-06-19 19:45:15

标签: c# .net function

为什么这个返回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;

}

3 个答案:

答案 0 :(得分:3)

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

  

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

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

  

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

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

答案 1 :(得分:0)

根据我的经验,方法要么过载要么使用默认参数。这是一个设计选择,虽然我发现自己编写重载方法而不是默认参数化方法。

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

答案 2 :(得分:0)

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

如果你想阅读更多关于可选参数的信息,我建议你阅读Eric Lippert的系列文章。您可以启动here