.ctorisambiguousbecausethemultiplememberswiththisnameintheclass我正在复制我面临的Case。假设我们有一个C#类的程序集:publicclassProgram{intn=0;publicvoidPrint(){Console.WriteLine(n);}publicProgram(){}publicProgram(intnum=10){n=num;我们在VB.NET项目中引用上述程序集并尝试创建Program类的实例:ModuleModule1SubMain()DimpAsNewProgram()p.Print()p=NewProgram(20)p.Print()Console.ReadLine()EndSubEndModuleVB.NET项目无法编译,给出错误:'.ctor'isambiguousbecausemultiplememberswiththisnameexistinclass'ConsoleApplication2.Program'。从错误消息中我们可以看出,VB.NET编译器不确定要调用哪个构造函数——因为一个构造函数是无参数的,而另一个具有可选参数。此问题出现在VS2010/.NET4中,而不是出现在VS2012/.NET4.5中。同样在C#中,它也没有任何问题,它成功编译并运行了Program类的对象初始化代码。有没有办法在不更改构造函数的情况下在VB.NET+VS2010/.NET4中创建Program类的实例?问题在于Program类中构造函数的定义。由于第二个参数是可选的,因此在使用NewProgram()调用时它们都是候选者。这会产生歧义。相反,使用此模式定义构造函数:publicProgram():this(10){}publicProgram(intnum){n=num;}或者只是一个构造函数:publicProgram(intnum=10){n=num;}(我个人更喜欢第一个)。最好的方法是更改??构造函数的实现,如@JonEgerton所写。如果那不行,你可以尝试以下——不是很漂亮——解决方法:以上是C#学习教程:.ctor是有歧义的,因为类中有多个同名的成员共享全部内容,如果是Everyone很有用,需要多了解C#学习教程。希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
