默认参数vs无参数

时间:2016-10-16 05:36:17

标签: c# .net c#-4.0

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

 GetNext();

现在,当调用GetNext而没有参数

时,将调用哪个方法
    ...
    keyboardControl: true,
    onSlideNextStart: function(){          
    if ((mySwiper.isEnd == true) && (mySwiper.activeIndex < <?php echo $totalCount; ?>)) {
    mySwiper.appendSlide('***return HTML here from post***');
      }         
     } 

为什么?

仅供参考:有人在接受采访时提到过这个问题。

3 个答案:

答案 0 :(得分:2)

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

  

如果两名候选人被判断为同样好,则优先选择a   候选者没有可选参数的参数   在通话中被省略了。这是一般的结果   对于拥有较少的候选人,重载决议的偏好   参数。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

没有参数方法GetNext()将被称为

void GetNext(){
   //implimentation
}

因为首选项是调用without参数方法而不是可选参数重载方法

重载决议

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

  • 如果找到多个候选项,则首选转换的重载解析规则将应用于显式指定的参数。忽略可选参数的省略参数。

  • 如果两个候选人被判断为同样好,则优先选择没有可选参数的候选人,其中参数在呼叫中被省略。这是对具有较少参数的候选者的重载分辨率的一般偏好的结果。