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?