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

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

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

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

Код выше является недействительным и не будет компилироваться. Теперь рассмотрим следующий код,

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

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

static void Main(string[] args)
{
    Foo<int> foo = new Foo<int>(1);
}

Выше код действителен и хорошо компилируется. Это вызываетFoo (целое число).

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

Ответы на вопрос(4)

Ваш ответ на вопрос