Aufruf der Konstruktorüberladung, wenn beide Überladungen dieselbe Signatur haben

Betrachten Sie die folgende Klasse,

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

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

Der obige Code ist ungültig und wird nicht kompiliert. Betrachten Sie nun den folgenden Code:

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

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

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

Der obige Code ist gültig und lässt sich gut kompilieren. Es ruftFoo (int count).

Meine Frage ist, wenn der erste ungültig ist, wie kann der zweite gültig sein? Ich kenne KlasseFoo <T> ist gültig, weil T und int unterschiedliche Typen sind. Aber wenn es gerne benutzt wirdFoo <int> foo = new Foo <int> (1), T bekommt einen Integer-Typ und beide Konstruktoren haben dieselbe Signatur, oder? Warum zeigt der Compiler keinen Fehler an, anstatt eine Überladung auszuwählen, die ausgeführt werden soll?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage