为什么C#可以用相同的参数重载两个方法,只要其中一个方法有默认参数? [英] Why could C# overload two methods with the same params as long as one of them has default param?

查看:52
本文介绍了为什么C#可以用相同的参数重载两个方法,只要其中一个方法有默认参数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我最近注意到C#编译器允许方法重载,如下所示:

    public static string foo(string a, bool x = false)
    {
        return "a";
    }
    public static string foo(string a)
    {
        return "b";
    }

据我测试,只要没有给出第二个参数,它总是返回&b&q;,这是有意义的。但是,我认为编译器确实不应该允许这种类型的重载。请问为什么这个功能是这样设计的,而不是编译器给出错误?

推荐答案

我无法解释为什么这是设计的一部分,也无法简单地解释为什么您在测试中看到哪个重载是受欢迎的。

如果您查看reference documentation,您会注意到以下三个用于描述重载解决方案的项目符号:

  • 如果方法、索引器或构造函数的每个参数都是可选的,或者按名称或位置与调用语句中的单个参数相对应,并且该参数可以转换为参数的类型,则该方法、索引器或构造函数是要执行的候选参数。
  • 如果找到多个候选项,则首选转换的重载解析规则将应用于显式指定的参数。忽略可选参数的省略参数。
  • 如果两个候选人被判断为同样优秀,则优先选择没有可选参数的候选人,这些参数的参数在调用中被省略。重载解析通常首选参数较少的候选项。

我要断言,在您的测试中,项目符号#3最适用于您的观察-因为您省略了第二个参数,并且两种方法都一样好,所以解决方案有利于您的第二个方法,您会看到";b";返回。

这篇关于为什么C#可以用相同的参数重载两个方法,只要其中一个方法有默认参数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆