Что делают методы "public override bool equals(object obj)" и "public override int gethashcode()"?

Я начал изучать перегрузку оператора, и в примере кода, который я нашел, эти два метода были (public override bool equals(object obj) а также public override int gethashcode()). Я не понял, почему они там, потому что, когда я перезаписал эту программу, я не увидел, что компилятор входит в них. Я не знаю, что они делают или что я переопределяю.

Может кто-нибудь, пожалуйста, помогите мне и объясните это?

2 ответа

Большинство типов в.NET происходят от типа System.Objectпросто называется object в C#. (Например, интерфейсы этого не делают, однако их реализации делают.)

System.Object объявляет методы Equals а также GetHashCode а также другие участники. (Примечание: дело имеет значение в C#). Созданные вами типы автоматически наследуют эти методы.

Задача Equals это сравнить объект с другим. Реализация по умолчанию для ссылочных типов заключается в сравнении ссылок. Если вы хотите изменить это поведение, вам придется переопределить этот метод.

GetHashCode вычисляет хеш-код объекта и используется в хеш-таблицах. Например, типы Dictionary<TKey,TValue> а также HashSet<T> использовать это. См. Типы Hashtable и Коллекция словарей. Если вы переопределите Equals, вы должны переопределить GetHashCode а также для того, чтобы сохранить последовательность.

Лучше всего сначала обратиться к документации.

Object.Equals -> Определяет, равен ли указанный объект текущему объекту.

Тип сравнения между текущим экземпляром и параметром obj зависит от того, является ли текущий экземпляр ссылочным типом или типом значения. Если текущий экземпляр является ссылочным типом, метод Equals(Object) проверяет равенство ссылок, и вызов метода Equals(Object) эквивалентен вызову метода ReferenceEquals. Ссылочное равенство означает, что сравниваемые переменные объекта ссылаются на один и тот же объект.

Object.GetHashCode -> Служит хеш-функцией для определенного типа.

Хеш-код - это числовое значение, которое используется для идентификации объекта во время проверки на равенство. Он также может служить индексом для объекта в коллекции. Метод GetHashCode подходит для использования в алгоритмах хеширования и структурах данных, таких как хеш-таблица.

Почему они переопределяют > Все типы в C# являются производными от System.Object. Они переопределяют, чтобы дать возможность получить класс, чтобы обеспечить альтернативную / подходящую реализацию этих функций при необходимости. В противном случае реализация по умолчанию (в System.Object должно быть достаточно).

Другие вопросы по тегам