Re[4]: x.Equals(y)
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 11.01.17 07:03
Оценка: 1 (1) :)
Здравствуйте, vdimas, Вы писали:

V>Здравствуйте, Qbit86, Вы писали:


V>>>Что не так-то?

Q>>Не так вот эта чушь: «Никак он не вызывается. x.Equals(y) — это метод базового Object», в ответ на «Пример был про то, как вызывается метод констрейнта у экземпляра типа».

V>У тебя по ссылке 4 места с x.Equals(y), например такое:

V>
V>internal sealed class ObjectEqualityComparer<T>: EqualityComparer<T>
V>    {
V>        [Pure]
V>        public override bool Equals(T x, T y) {
V>            if (x != null) {
V>                if (y != null) return x.Equals(y);
V>                return false;
V>            }
V>            if (y != null) return false;
V>            return true;
V>        }
V>


Q>>Приведённый код самодостаточен, его можно скопировать в IDE и запустить


V>Ну запусти и убедись, вызывается метод класса Object.



Метод IEquatable&lt;T&gt;.Equals(T)


 public bool Equals(Person other)
   {
      if (other == null)
         return false;

      if (this.uniqueSsn == other.uniqueSsn)
         return true;
      else
         return false;
   }

   public override bool Equals(Object obj)
   {
      if (obj == null)
         return false;

      Person personObj = obj as Person;
      if (personObj == null)
         return false;
      else
         return Equals(personObj);
   }


Будет вызываться метод Equals интерфейса IEquatable.

Иначе бы в public override bool Equals(Object obj) была бы бесконечная рекурсия.

Все по приоритетам. Я даже отдельно делал свой сортировщик по приоритетам для ref параметров при вызове через Reflection из 1С

Приоритет вызова перегруженных методов
Автор: Serginio1
Дата: 09.06.16
и солнце б утром не вставало, когда бы не было меня
Отредактировано 11.01.2017 8:40 Serginio1 . Предыдущая версия . Еще …
Отредактировано 11.01.2017 7:18 Serginio1 . Предыдущая версия .
Отредактировано 11.01.2017 7:05 Serginio1 . Предыдущая версия .
Отредактировано 11.01.2017 7:04 Serginio1 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.