【发布时间】:2016-06-23 10:35:11
【问题描述】:
我定义了以下方法:
void Write(string fileContent, string fileName, string container = StorageBlobContainers.ProfilePictures)
代码编译没有问题,所以我写了代码来执行它(来自不同的文件):
string json = JsonConvert.SerializeXNode(node);
FileProcessor.Write(json, "productscontainer");
但由于某种原因,它似乎什么也没做。
经过几分钟的努力理解问题后,我终于找到了它。在同一个类的某个地方,已经有一个 Write 函数定义如下:
void Write(string filePath, string container = StorageBlobContainers.ProfilePictures)
{
if (!File.Exists(filePath))
return string.Empty;
...
这真的让我很困惑,因为它编译得很好,当然,这是有道理的,因为一种方法有 3 个参数签名,另一种有 2 个,但这不是很模棱两可和/或容易出错吗?对我来说,似乎没有一种方法是“合乎逻辑”的选择。为什么选择第二个而不是另一个?
【问题讨论】:
-
"为什么选择第二个而不是另一个?" - 因为这些是语言的规则。如果您愿意,我们可以从语言规范中剔除并指出导致这一点的具体原因,但这不太可能让您更进一步。
-
第二种方法怎么不是一个合乎逻辑的选择?您正在调用具有 2 个字符串参数的方法,而选择的方法是具有 2 个字符串参数的方法。这是一个完美的契合。
-
另外,请记住,可选参数是在版本 1 之后添加到语言中的,仅仅返回旧代码和添加默认值的行为不应该导致之前编译的代码无法编译或选择其他方法。
标签: c# overloading optional-parameters