在这个问题中,定义了以下类:
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,以供参考。
发布于 2014-02-20 11:35:09
因为VB语言在版本10和11之间发生了变化。在第11版语言规范中,第11.8.1节。增加了违反规则7.9条:
7.9.如果M没有使用任何可选参数默认值来代替显式参数,但是N使用,那么从集合中删除N。
(如第7.8条和第7.10条规则,但与此无关)
发布于 2014-02-20 11:22:02
对于VS2012和VS2013,定义如下:
过载解决方案 使用命名参数和可选参数会以下列方式影响过载解析:
https://stackoverflow.com/questions/21905894
复制相似问题