gpt4 book ai didi

c# - .ctor 是不明确的,因为类中存在多种具有此名称的成员

转载 作者:太空狗 更新时间:2023-10-29 22:37:27 26 4
gpt4 key购买 nike

我正在复制我所面临的情况。

假设我们有一个程序集,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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com