首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编译器歧义错误中的不一致

问编译器歧义错误中的不一致
EN

Stack Overflow用户
提问于 2014-02-20 11:08:08
回答 2查看 124关注 0票数 4

在这个问题中,定义了以下类:

代码语言:javascript
复制
public class Program
{
    int n = 0;

    public void Print()
    {
        Console.WriteLine(n);
    }

    public Program()
    {
    }

    public Program(int num = 10)
    {
        n = num;
    }
}

现在,显然使用new Program()调用构造函数是不明确的,因为第二个构造函数的参数是可选的。在阅读这篇文章时,还不清楚n应该用0还是10初始化。

然而:

对这一问题的实际报告似乎不一致。设置这个类并使用它,我能够在C#或VB.Net中以及在.Net 4或.Net 4.5中使用VB.Net。所有测试均在VS2013进行。

但是,在链接问题中,OP在使用VB.Net In .NET 4和VS2010时实际上得到了错误消息:

'.ctor‘是模棱两可的,因为类'ConsoleApplication2.Program’中存在多种具有此名称的成员。

那么,为什么有时会出现错误,而在其他时候,程序可以成功执行?

执行成功时n的值为0,以供参考。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-20 11:35:09

因为VB语言在版本10和11之间发生了变化。在第11版语言规范中,第11.8.1节。增加了违反规则7.9条:

7.9.如果M没有使用任何可选参数默认值来代替显式参数,但是N使用,那么从集合中删除N。

(如第7.8条和第7.10条规则,但与此无关)

票数 4
EN

Stack Overflow用户

发布于 2014-02-20 11:22:02

对于VS2012和VS2013,定义如下:

过载解决方案 使用命名参数和可选参数会以下列方式影响过载解析:

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

来源

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21905894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档