Внутренности “равняются” в.NET

Используйте AsQueryable<T>() дополнительный метод.

5
задан Steven Sudit 20 October 2009 в 20:29
поделиться

3 ответа

Вы не отвергаете и не скрываете Object.Equals () , потому что ваша версия принимает профессор как тип параметра, а не объект. Вы перегружаете метод Equals ().

C # позволяет двум методам с одним и тем же именем различаться по типу аргумента (ов), который они принимают. Это называется перегрузкой - это можно рассматривать как полиморфизм времени компиляции.

Переопределение (что вы могли и, вероятно, также должны были бы сделать) изменяет реализацию метода по сравнению с его версией в базовом классе. Это основа для полиморфизма типов среды выполнения.

Скрытие - менее распространенный метод, который позволяет производному классу маскировать версию метода в базовом классе. В зависимости от типа ссылки, через которую вы делаете вызов, вы можете либо получить версию базового класса (если вызывается через ссылку базового класса), либо версию производного класса (если вызывается через ссылку производного типа. ).

Отвечая на второй вопрос, вам следует использовать IEquatable , когда есть семантика для сравнения «равенства» двух экземпляров, которая отделена от ссылочного равенства.

Вы должны реализовать IComparable или IComparable , когда есть семантика для заказа товаров. Это означает, что они могут быть меньше, больше или эквивалентны.

8
ответ дан 13 December 2019 в 22:11
поделиться

Метод Object.Equals принимает объект типа 'объект' в качестве параметра. Ваш метод Equals принимает в качестве параметра объект типа «Профессор». Оба эти метода могут сосуществовать, потому что разрешено различать два метода с одинаковыми именами по их списку параметров; это перегрузка метода вызова.

1
ответ дан 13 December 2019 в 22:11
поделиться

You don't need to explicitly implement IEquatable if all you want to do is override the default Equals() implementation.

You can just do something like this:

class Professor
{

   public string Name { get; set; }

   public override bool Equals(object cust)
   {
       if (cust == null || !(cust is Professor)) return false;
       return cust.Name == this.Name;
   }

}

Be aware that if you override Equals() you also should override GetHashCode() to ensure proper operation of dictionaries and other collections that make use of hashing to differentiate between objects. Here's the MSDN page guidelines for overriding Equals().

1
ответ дан 13 December 2019 в 22:11
поделиться
Другие вопросы по тегам:

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