默认参数vs无参数

本文关键字:参数 vs 默认 | 更新日期: 2023-09-27 18:13:11

我有两个方法,如下所示。一个没有参数,一个只有可选参数。

void GetNext(){
   //implimentation
}
void GetNext(int currentindex = 0){
   //implimentation
}

现在当调用GetNext而不带参数时将调用哪个方法

 GetNext();

,为什么?

供参考:这个问题在一次面试中被问到。

默认参数vs无参数

调用不带可选参数的方法(GetNext())。为什么可以在MSDN中找到答案:

如果两个候选人被认为同样优秀,则优先选择a没有可选参数的候选参数在电话中被省略了。这是将军的后果的候选项的重载解析首选项参数。

void GetNext()将被调用,在这种情况下,带有可选参数的方法是隐藏的。但是如果你调用GetNext(1), GetNext(int currentindex = 0)将被调用

不带参数的方法GetNext()将被称为

void GetNext(){
   //implimentation
}

,因为首选是调用无参数方法而不是可选的参数重载方法

重载解析

  • 如果方法、索引器或构造函数的每个参数都是可选的,或者根据名称或位置对应于调用语句中的单个实参,并且该实参可以转换为参数的类型,则该方法、索引器或构造函数是执行的候选对象。

  • 如果找到多个候选参数,则将优先转换的重载解析规则应用于显式指定的参数。

  • 如果两个候选者被判断为同样好,优先考虑没有可选参数的候选者,其参数在调用中被省略。这是重载解析中对具有较少参数的候选项的一般偏好的结果。