Реализация IEquatable <T>, где T является интерфейсом

Так как у Вас действительно есть два отдельных приложения, скомпилируйте их с различными версиями класса "Человек" - с приложением для получателя, не имеющим @XmlRootElement(name="person") на Person. Мало того, что это ужасно, но и это побеждает пригодность для обслуживания, которую Вы хотели от использования того же определения Человека и для отправителя и для получателя. Его один плюс - то, что это работает.

7
задан Matthew Vines 30 September 2009 в 15:18
поделиться

3 ответа

Вместо реализации IEquatable , не могли бы вы реализовать IEqualityComparer в отдельном классе? В большинстве случаев, когда вас интересует равенство, вы можете вместо этого указать компаратор, и я подозреваю, что так он будет чище.

7
ответ дан 6 December 2019 в 19:39
поделиться

На основании вашего вопроса кажется как будто вы знаете, каким будет алгоритм Equals и что он будет одинаковым для ClassA и ClassB. Почему бы не сделать следующее

  1. Определить IMyInterface для наследования от IEquatable
  2. Определить абстрактный базовый класс MyInterfaceBase, который реализует IMyInterface и имеет реализацию IEquatable Have
  3. ClassA и ClassB являются производными от MyInterfaceBase
5
ответ дан 6 December 2019 в 19:39
поделиться

Я бы подумал, что если интерфейс не может быть преобразован в абстрактный класс, не имеет большого смысла сравнивать два реализованных класса друг с другом напрямую или автоматически. Это означает, что реализация пользовательского сравнения для каждого класса будет правильным решением. Я уверен, что вы можете каким-то образом реорганизовать код сравнения, чтобы впоследствии было легче его изменить.

0
ответ дан 6 December 2019 в 19:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: