【发布时间】:2017-04-10 20:12:18
【问题描述】:
我今天遇到了这个,我很惊讶我以前没有注意到它。给定一个类似于以下的简单 C# 程序:
public class Program
{
public static void Main(string[] args)
{
Method(); // Called the method with no arguments.
Method("a string"); // Called the method with a string.
Console.ReadLine();
}
public static void Method()
{
Console.WriteLine("Called the method with no arguments.");
}
public static void Method(string aString = "a string")
{
Console.WriteLine("Called the method with a string.");
}
}
您将获得每个方法调用的 cmets 中显示的输出。
我理解为什么编译器会选择它所做的重载,但为什么一开始就允许这样做呢?我不是问重载解决规则是什么,我理解这些,但我问的是编译器允许本质上是两个具有相同签名的重载是否有技术原因?
据我所知,具有签名的函数重载与另一个重载的不同之处仅在于具有一个额外的可选参数>
它所做的一件事是让程序员(他们可能没有给予足够的关注)认为他们正在调用与实际不同的重载。
我想这是一个相当少见的情况,为什么允许这样做的答案可能只是因为不允许它的复杂性根本不值得,但是 C# 允许函数重载与其他函数重载不同的另一个原因仅仅是通过具有一个额外的可选参数?
【问题讨论】:
-
C# 团队尽可能地拖延了这个时间。但他们屈服于第 4 版以满足大众的需求,尤其是 Office 编程如果没有它就太讨厌了。只需设置自己的编码标准即可避免该功能。
标签: c# overloading ambiguity optional-arguments