Что делают методы "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 должно быть достаточно).