使用可选参数冲突重载方法

使用可选参数冲突重载方法

我有两个重载方法,一个带有可选参数。

void foo(string a)  { }  void foo(string a, int b = 0) { }

现在我打电话给:

 foo("abc");

有趣的是第一次重载被调用。为什么第二次重载的可选值设置为零?

说实话,我希望编译器带来一个错误,至少是一个警告,以避免无意中执行错误的方法。

这种行为的原因是什么?为什么C#团队以这种方式定义它?


至尊宝的传说
浏览 514回答 4
4回答

墨色风雨

为什么他们这样定义?是否存在使用可选参数的重载有意义的场景?永远不会使用默认值调用它,对吗?但它可能导致不必要的错误。我仍然认为compliler应该至少给出一个警告。还有其他一些例子,开发人员必须明确告诉编译器他知道他在做什么。例如,如果方法中的参数声明为ref,我也需要在方法调用中显式使用ref关键字; 否则它将无法编译。
打开App,查看更多内容
随时随地看视频慕课网APP