Ключ в том, что вы не переопределяете оператор - вы перегружаете это.
Нет оператора, определенного для
operator ==(IMyClass x, IMyClass y)
так что компилятору нечего вызывать.Он не может вызвать
operator ==(MyClass x, MyClass y)
, так как не знает, что m1
и m2
на самом деле будут ссылаться на экземпляр MyClass
.
Насколько я знаю, естьнет способа реализовать оператор, который будет использоваться для интерфейсов - в конце концов, несколько реализаций могут предоставить свой собственный, только для одной точки возможной двусмысленности.
Лично я несколько опасаюсь пытаться говорить о равенстведля незакрытых типов для начала - равенство и наследование не очень хорошо сочетаются.Конечно, это вдвойне относится к интерфейсам :) Возможно, вам лучше всего реализовать соответствующий IEqualityComparer<IMyClass>
и использовать его вместо этого.