C# 可选参数vs空参数方法和重载构造函数

C# 可选参数vs空参数方法和重载构造函数,c#,methods,overloading,C#,Methods,Overloading,简单地说,假设您有两种方法: public static void WriteMessage() { Console.Write("Empty Parameter Function"); } public static void WriteMessage(string data = "Some Data") { Console.Write("Optional Parameter Function"); } 为什么如果在没有任何参数的情况下调用WriteMessage函数

简单地说,假设您有两种方法:

public static void WriteMessage() 
{
    Console.Write("Empty Parameter Function");
}



public static void WriteMessage(string data = "Some Data")
{
    Console.Write("Optional Parameter Function");
}

为什么如果在没有任何参数的情况下调用WriteMessage函数,它会运行“空参数函数”?我理解方法重载,但为什么可选参数函数不运行,就好像空参数函数不存在一样,它会运行?

以下关于重载解决方案的观点解释了该决定:

如果两个候选者被判定为同等优秀,则优先选择没有可选参数的候选者,因为调用中省略了这些参数。这是因为对于参数较少的候选者,重载解析的一般偏好


也因为这样,添加带有可选参数的方法重载不会改变现有代码的行为,这是相当意外的。