默认参数vs无参数
本文关键字:参数 vs 默认 | 更新日期: 2023-09-27 18:13:11
我有两个方法,如下所示。一个没有参数,一个只有可选参数。
void GetNext(){
//implimentation
}
void GetNext(int currentindex = 0){
//implimentation
}
现在当调用GetNext而不带参数时将调用哪个方法
GetNext();
,为什么?
供参考:这个问题在一次面试中被问到。
调用不带可选参数的方法(GetNext()
)。为什么可以在MSDN中找到答案:
如果两个候选人被认为同样优秀,则优先选择a没有可选参数的候选参数在电话中被省略了。这是将军的后果的候选项的重载解析首选项参数。
void GetNext()将被调用,在这种情况下,带有可选参数的方法是隐藏的。但是如果你调用GetNext(1), GetNext(int currentindex = 0)将被调用
不带参数的方法GetNext()
将被称为
void GetNext(){
//implimentation
}
,因为首选是调用无参数方法而不是可选的参数重载方法
重载解析
如果方法、索引器或构造函数的每个参数都是可选的,或者根据名称或位置对应于调用语句中的单个实参,并且该实参可以转换为参数的类型,则该方法、索引器或构造函数是执行的候选对象。
如果找到多个候选参数,则将优先转换的重载解析规则应用于显式指定的参数。
如果两个候选者被判断为同样好,优先考虑没有可选参数的候选者,其参数在调用中被省略。这是重载解析中对具有较少参数的候选项的一般偏好的结果。