Я копирую ситуацию, с которой я столкнулся..ctor неоднозначно, потому что в классе есть несколько типов членов с таким именем
Допустим, у нас есть собрание, с 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» неоднозначно, поскольку в классе «Conso» существует несколько видов членов с таким именем leApplication2.Program.
Из сообщения об ошибке мы можем видеть, что компилятор VB.NET не уверен, какой конструктор вызывать - поскольку один конструктор без параметров и другой с одним необязательным параметром. Эта проблема возникает в VS2010/.NET 4, а не в VS2012/.NET 4.5. Также в C# он не вызывает никаких проблем, он успешно компилирует и запускает код инициализации объекта класса Program.
Есть ли способ создать экземпляр класса программы в VB.NET + VS2010/.NET 4 без изменения конструкторов?
Почему вы хотите эту конструкцию?Есть ли способ, который мне не хватает, что вы действительно можете вызвать второй конструктор и использовать компилятор по умолчанию? –
Этот код пахнет. Это амбициозно без 'VB'. Как вы думаете, значение 'num' должно использоваться для использования как var program = new Program()'? Вы * факультативно * хотите 'num' быть' 10' или это конструктор по умолчанию, где 'num' is * field initialized * является' 0' ??? – Sinatr
@Sinatr, это репликация ситуации, с которой я столкнулся. Я написал это так, чтобы я мог различать вывод и определять, какой конструктор вызывался на C#. – Brij