Chamando sobrecarga de construtor quando ambas as sobrecargas possuem a mesma assinatura
Considere a seguinte classe,
class Foo
{
public Foo(int count)
{
/* .. */
}
public Foo(int count)
{
/* .. */
}
}
O código acima é inválido e não será compilado. Agora considere o seguinte código,
class Foo<T>
{
public Foo(int count)
{
/* .. */
}
public Foo(T t)
{
/* .. */
}
}
static void Main(string[] args)
{
Foo<int> foo = new Foo<int>(1);
}
O código acima é válido e compila bem. ChamaFoo (contagem int).
Minha pergunta é, se o primeiro é inválido, como o segundo pode ser válido? Eu sei classeFoo <T> é válido porque T e int são tipos diferentes. Mas quando é usado comoFoo <int> foo = novo Foo <int> (1), T está obtendo um tipo inteiro e ambos os construtores terão a mesma assinatura, certo? Por que o compilador não mostra erro em vez de escolher uma sobrecarga para executar?