C# 带有可选参数的方法重载

C# 带有可选参数的方法重载,c#,overloading,C#,Overloading,我有一个类,如下所示,带有两个重载方法 Class A { public string x(string a, string b) { return "hello" + a + b; } public string x(string a, string b, string c = "bye") { return c + a + b; } } 如果我使用两个参数从另一个类调用方法x,那么将执行哪个方法,为什么?i、

我有一个类,如下所示,带有两个重载方法

Class A
{
    public string x(string a, string b)
    {
        return "hello" + a + b;
    }

    public string x(string a, string b, string c = "bye")
    {
        return c + a + b;
    }
}
如果我使用两个参数从另一个类调用方法
x
,那么将执行哪个方法,为什么?i、 e

string result = new A().x("Fname", "Lname");
我已经在我的控制台应用程序中对此进行了测试,并使用2个参数执行了该方法。有人能解释一下吗?

使用命名参数和可选参数会影响重载解析: 如果两位候选人被认为同样优秀,则优先选择a 没有可选参数的候选参数 电话中遗漏了这些信息。这是一个普遍的结果 对于拥有较少资源的候选人,优先选择重载解决方案 参数

参考:


将调用具有两个参数
stringx(stringa,stringb)
的上述规则方法


注意:如果两个重载方法都有可选参数,则编译器将给出编译时模糊错误。

如果使用两个参数调用该方法,则它将使用两个参数的方法。如果您用三个参数调用一个,它将使用另一个。

它将始终执行方法,该方法首先与确切数量的参数匹配,在您的情况下,它将执行:

可选参数方法优先级小于具有精确参数数的函数

public string x(string a, string b);

编译将产生编译时歧义错误:)@JerryGoyal有没有办法在不显式传递参数的情况下使用可选参数调用该方法?例如,我想用
字符串c
中的默认值调用第二个方法。我该怎么做?基本上:在这种情况下,拥有默认值是完全无用的,因为你永远不会使用它…我很惊讶这段代码没有给出编译时错误。