Both Derived and Derived2<(int notA, int notB)> only implement one interface: I0<(int notA, int notB)>. This is observable if the interface is IEnumerable, as you will see tuple names “notA” and “notB ...