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

2024-01-15

In 这个问题 https://stackoverflow.com/q/21904767/592111,定义了以下类:

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 or 10.

However:

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

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

“.ctor”不明确,因为“ConsoleApplication2.Program”类中存在多种具有此名称的成员。

那么为什么有时会出错,有时却能成功执行呢?

参考值n执行成功时为0。


因为 VB 语言在版本 10 和11 http://www.microsoft.com/en-us/download/details.aspx?id=15039。在第 11 版语言规范中,第 11.8.1 节。添加了决胜规则 7.9:

7.9。如果 M 没有使用任何可选参数默认值来代替显式参数,但 N 却使用了,则从集合中消除 N。

(规则 7.8 和 7.10 也是如此,但与此处无关)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编译器歧义错误中的不一致 的相关文章

随机推荐