Bri*_*rij 5 .net c# vb.net constructor ambiguity
我正在复制我所面临的情况.
假设我们有一个程序集,C#类为:
public class Program
{
int n = 0;
public void Print()
{
Console.WriteLine(n);
}
public Program()
{
}
public Program(int num = 10)
{
n = num;
}
}
Run Code Online (Sandbox Code Playgroud)
我们在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
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
或者只是单个构造函数:
public Program(int num = 10)
{
n = num;
}
Run Code Online (Sandbox Code Playgroud)
(我个人更喜欢第一个).
| 归档时间: |
|
| 查看次数: |
1676 次 |
| 最近记录: |