Вызов перегрузки конструктора, когда обе перегрузки имеют одинаковую подпись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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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