Информация об изменениях

Сообщение Re[4]: x.Equals(y) от 11.01.2017 7:03

Изменено 11.01.2017 7:05 Serginio1

Re[4]: x.Equals(y)
Здравствуйте, 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) была бы бесконечная рекурсия.
Re[4]: x.Equals(y)
Здравствуйте, 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) была бы бесконечная рекурсия.