Реализуйте метод класса объекта => общедоступный виртуальный bool Equals (obj); - PullRequest
0 голосов
/ 31 октября 2018

Надо реализовать метод класса объекта => public virtual bool Equals (obj); без использования метода равных или эталонных равных. Он должен работать так же, как виртуальный метод равных.

I может использовать objA == objB.

1 Ответ

0 голосов
/ 31 октября 2018

Я не дам вам кодовый ответ, так как в конце концов это задание.

Вещи, которые вы хотите проверить:

  1. Нет - оба объекта равны нулю? Является ли один объект пустым, а другой нет?

    object.ReferenceEquals(objA, null) - это старый предпочтительный способ (поскольку он потенциально не использует переопределенную реализацию Equals, как ==. С C # 7+ вы также можете использовать if (objA is null).

  2. Теперь вы можете сравнить if (objA == objB). Обратите внимание, что именно здесь будет использоваться objA.Equals(objB), но поскольку это запрещено, я думаю, мы можем использовать ==.

Существует также objA.GetHashCode(), который указывает потенциал для равенства. Я говорю «потенциальный», потому что два разных объекта могут иметь одинаковый хеш-код. Если два объекта равны (и правильно реализованы), то они должны иметь одинаковый хэш-код. Вкратце: вы можете положиться на GetHashCode(), чтобы указать на возможность равенства, но вам нужно сделать еще одну проверку (2), чтобы быть уверенным.

См. здесь , чтобы узнать больше об отношениях между GetHashCode() и Equals(). И смотрите здесь для получения дополнительной информации о == против Equals()

...