Por que as restrições de tipo não fazem parte da assinatura do método?

Então eu liRestrições de Eric Lippert não fazem parte da assinatura ', e agora entendo que a especificação especifica que restrições de tipo são verificadas após a resolução de sobrecarga, mas ainda não estou claro por que esse DEVE ser o caso. Abaixo está o exemplo de Eric:

static void Foo<T>(T t) where T : Reptile { }
static void Foo(Animal animal) { }
static void Main() 
{ 
    Foo(new Giraffe()); 
}

Isso não compila porque a resolução de sobrecarga para:Foo(new Giraffe()) deduz queFoo<Giraffe> é a melhor correspondência de sobrecarga, mas as restrições de tipo falham e um erro em tempo de compilação é gerado. Nas palavras de Eric:

O princípio aqui é a resolução de sobrecarga (e inferência de tipo de método) encontra a melhor correspondência possível entre uma lista de argumentos e a lista de parâmetros formais de cada método candidato. Ou seja, eles examinam a assinatura do método candidato.

s restrições @Type NÃO fazem parte da assinatura, maspor que eles não podem ser? Quais são alguns cenários em que é uma má idéia considerar as restrições de tipo como parte da assinatura? É apenas difícil ou impossível de implementar? Não estou defendendo que, se a sobrecarga mais bem escolhida for impossível, por qualquer motivo, chamar-se silenciosamente para o segundo melhor; Eu odiaria isso. Estou apenas tentando entender por que as restrições de tipo não podem ser usadas para influenciar a escolha da melhor sobrecarg

Estou imaginando isso internamente no compilador C #,penas para fins de resolução de sobrecarga (não reescreve permanentemente o métod, Os seguintes

static void Foo<T>(T t) where T : Reptile { }

gets transformados em:

static void Foo(Reptile  t) { }

Por que você não pode "puxar" as restrições de tipo para a lista formal de parâmetros? Como isso altera a assinatura de alguma maneira ruim? Eu sinto que isso apenas reforça a assinatura. EntãoFoo<Reptile> nunca será considerado um candidato a sobrecarga.

Edit 2: Não é à toa que minha pergunta foi tão confusa. Não li corretamente o blog de Eric e citei o exemplo errado. Eu editei no exemplo que acho mais apropriado. Eu também mudei o título para ser mais específico. Esta pergunta não parece tão simples quanto eu imaginava, talvez esteja perdendo algum conceito importante. Tenho menos certeza de que este é um material de fluxo de pilha, talvez seja melhor que essa pergunta / discussão seja movida para outro luga

questionAnswers(4)

yourAnswerToTheQuestion