Вызов перегрузки конструктора, когда обе перегрузки имеют одинаковую подписьC#

Место общения программистов C#
Anonymous
Вызов перегрузки конструктора, когда обе перегрузки имеют одинаковую подпись

Сообщение Anonymous »

Рассмотрим следующий класс:

Код: Выделить всё

class Foo
{
public Foo(int count)
{
/* .. */
}

public Foo(int count)
{
/* .. */
}
}
Приведенный выше код недействителен и не скомпилируется. Теперь рассмотрим следующий код:

Код: Выделить всё

class Foo
{
public Foo(int count)
{
/* .. */
}

public Foo(T t)
{
/* .. */
}
}

static void Main(string[] args)
{
Foo foo = new Foo(1);
}
Приведенный выше код действителен и хорошо компилируется. Он вызывает Foo(int count).

Мой вопрос: если первый недействителен, то как второй может быть действительным? Я знаю, что класс Foo действителен, поскольку T и int — разные типы. Но когда он используется как Foo foo = new Foo(1), T получает целочисленный тип, и оба конструктора будут иметь одинаковую подпись, верно? Почему компилятор не показывает ошибку, а не выбирает для выполнения перегрузку?

Подробнее здесь: https://stackoverflow.com/questions/129 ... -signature

Вернуться в «C#»