使用out和可选参数进行方法重载

用户名

为什么这样的重载在C#中起作用?

public string DisplayOverload(string a, string b, string c = "c")
{
    return a + b + c;
}
public string DisplayOverload(string a, string b, out string c)
{
    c = a + b;
    return a + b;
}

虽然这不起作用

public string DisplayOverload(string a, string b, string c = "c")
{
    return a + b + c;
}
public string DisplayOverload(string a, string b, string c)
{
    return a + b + c;
}
索纳·古努尔(Soner Gonul)

out并且ref视为方法签名的一部分。

$ 3.6起签名和超载

请注意,任何ref和out参数修饰符(第10.5.1节)都是签名的一部分。因此,F(int)F(ref int)是唯一的签名。

您的第二个示例c可选参数即使您在没有此参数值的情况下调用,也调用了3参数重载方法,但编译器无法知道要调用哪个参数

有关更多信息,请查看Eric Lippert关于此主题的答案

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章