Przeciążenie konstruktora przeciążenia, gdy oba przeciążenia mają ten sam podpis

Rozważ następującą klasę,

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

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

Powyższy kod jest nieprawidłowy i nie będzie się kompilował. Teraz rozważ następujący kod,

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

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

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

Powyższy kod jest poprawny i dobrze się kompiluje. To dzwoniFoo (int count).

Moje pytanie brzmi: jeśli pierwszy jest nieważny, jak drugi może być ważny? Znam klasęFoo <T> jest prawidłowy, ponieważ T i int są różnymi typami. Ale kiedy jest używany jakFoo <int> foo = new Foo <int> (1), T pobiera typ całkowity, a oba konstruktory będą miały taki sam podpis? Dlaczego kompilator nie wyświetla błędu zamiast wybierać przeciążenie do wykonania?

questionAnswers(4)

yourAnswerToTheQuestion