Почему ограничения типов не являются частью сигнатуры метода?

Так я читаюЭрик Липперт «Ограничения не являются частью подписи», и теперь я понимаю, что спецификация определяет, что ограничения типа проверяются ПОСЛЕ разрешения перегрузки, но я до сих пор не понимаю, почему это ДОЛЖНО иметь место. Ниже приведен пример Эрика:

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

Это не компилируется, потому что разрешение перегрузки для:Foo(new Giraffe())&nbsp;делает вывод, чтоFoo<Giraffe>&nbsp;является наилучшим совпадением при перегрузке, но тогда ограничения типа не выполняются, и выдается ошибка времени компиляции. По словам Эрика:

Принцип здесь - это разрешение перегрузки (и вывод типа метода), чтобы найти наилучшее возможное соответствие между списком аргументов и списком формальных параметров каждого метода-кандидата. То есть они смотрят на сигнатуру метода-кандидата.

Типовые ограничения НЕ являются частью подписи, нопочему они не могут быть? В каких сценариях плохая идея считать ограничения типа частью сигнатуры?&nbsp;Это просто сложно или невозможно реализовать? Я не защищаю то, что, если по какой-либо причине невозможно выбрать наилучшую перегрузку, молча отступите ко второму. Я бы ненавидел это. Я просто пытаюсь понять, почему ограничения типа не могут быть использованы, чтобы повлиять на выбор наилучшей перегрузки.

Я представляю, что внутри компилятора C #,только для разрешения перегрузки (метод не переписывается навсегда), последующий:

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

преобразуется в:

static void Foo(Reptile  t) { }

Почему вы не можете «вставить» ограничения типа в формальный список параметров? Как это меняет подпись каким-либо образом? Я чувствую, что это только укрепляет подпись. затемFoo<Reptile>&nbsp;никогда не будет рассматриваться в качестве кандидата на перегрузку.

Изменить 2:&nbsp;Неудивительно, что мой вопрос был настолько запутанным. Я не читал должным образом блог Эрика и привел неправильный пример. Я отредактировал в примере, который я считаю более подходящим. Я также изменил название, чтобы быть более конкретным. Этот вопрос не кажется таким простым, как я впервые себе представлял, возможно, мне не хватает какой-то важной концепции. Я менее уверен в том, что это материал для работы со стеком, лучше всего перенести этот вопрос / обсуждение в другое место.