Первая причина, которая приходит на ум, заключается в следующем.
class Example : Y<int,int> {
...
}
В этом случае тип Y реализует один и тот же интерфейс дважды, но может иметь разные реализации одного и того же метода. Это создает неразрешимую неоднозначность в компиляторе для метода Tx как при реализации, так и при вызове.
Например, возьмите следующую проблему.
class OtherExample<A,B> : Y<A,B> {
B Tx(A x) {
Console.WriteLine("Top method in the file");
return default(B);
}
A Tx(B x) {
Console.WriteLine("Bottom method in the file");
return default(A);
}
}
Если вы игнорируете ошибку унификации, это легальная реализация Y<A,B>
. Теперь представьте, что пользователь сделал следующее
var v1 = new OtherExample<int,int>();
v1.Tx(42);
Что именно произойдет в этом сценарии? Как компилятор, или CLR в этом отношении, сможет устранить неоднозначность? У вас были бы методы с одинаковыми именами с одинаковыми сигнатурами.