我正在复制我所面临的情况。
假设我们有一个程序集,C# 类为:
public class Program
{
int n = 0;
public void Print()
{
Console.WriteLine(n);
}
public Program()
{
}
public Program(int num = 10)
{
n = num;
}
}
我们在 VB.NET 项目中引用上述程序集并尝试创建 Program 类的实例:
Module Module1
Sub Main()
Dim p As New Program()
p.Print()
p = New Program(20)
p.Print()
Console.ReadLine()
End Sub
End Module
VB.NET 项目未编译,出现错误:
'.ctor' 不明确,因为类 'ConsoleApplication2.Program' 中存在多种具有此名称的成员。
从错误消息中我们可以看出,VB.NET 编译器不确定要调用哪个构造函数 - 因为一个构造函数是无参数的,而另一个具有一个可选参数。此问题发生在 VS2010/.NET 4 中,而不是在 VS2012/.NET 4.5 中。同样在 C# 中它没有给出任何问题,它成功编译并运行了 Program 类的对象初始化代码。
有没有一种方法可以在不更改构造函数的情况下在 VB.NET + VS2010/.NET 4 中创建 Program 类的实例?
最佳答案
问题出在 Program
类中构造函数的定义
因为第二个参数是可选的,所以在使用 New Program()
调用时两者都是候选者。这造成了歧义。
相反,使用这种模式定义您的构造函数:
public Program()
: this(10)
{
}
public Program(int num)
{
n = num;
}
或者只是一个构造函数:
public Program(int num = 10)
{
n = num;
}
(我个人更喜欢第一个)。
关于c# - .ctor 是不明确的,因为类中存在多种具有此名称的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21904767/