GetHashCode возвращает значение на основе текущего экземпляра, используемое для алгоритмов хэширования и структур данных, таких как хэш-таблица. Два объекта, которые относятся к одному типу и равны, должны возвращать один и тот же хэш-код, чтобы убедиться, что экземпляры следующих типов работают правильно:
Это правило применяется только к коду Visual Basic. Компилятор C# создает отдельное предупреждение, CS0659.
Устранение нарушений
Чтобы устранить нарушение этого правила, предоставьте реализацию GetHashCode. Для пары объектов одного типа убедитесь, что реализация возвращает одно и то же значение, если ваша реализация Equals возвращает true для пары.
Когда лучше отключить предупреждения
Для этого правила отключать вывод предупреждений не следует.
Пример класса
В следующем примере показан класс (ссылочный тип), нарушающий правило.
VB
' This class violates the rule.PublicClass Point
PublicProperty X AsIntegerPublicProperty Y AsIntegerPublicSubNew(x AsInteger, y AsInteger)
Me.X = x
Me.Y = y
EndSubPublicOverridesFunctionEquals(obj AsObject) AsBooleanIf obj = NothingThenReturnFalseEndIfIf [GetType]() <> obj.GetType() ThenReturnFalseEndIfDim pt As Point = CType(obj, Point)
Return X = pt.X AndAlso Y = pt.Y
EndFunctionEndClass
В следующем примере нарушение устраняется путем переопределения GetHashCode().
VB
' This class satisfies the rule.PublicClass Point
PublicProperty X AsIntegerPublicProperty Y AsIntegerPublicSubNew(x AsInteger, y AsInteger)
Me.X = x
Me.Y = y
EndSubPublicOverridesFunction GetHashCode() AsIntegerReturn X Or Y
EndFunctionPublicOverridesFunctionEquals(obj AsObject) AsBooleanIf obj = NothingThenReturnFalseEndIfIf [GetType]() <> obj.GetType() ThenReturnFalseEndIfDim pt As Point = CType(obj, Point)
ReturnEquals(pt)
EndFunctionPublicOverloadsFunctionEquals(pt As Point) AsBooleanReturn X = pt.X AndAlso Y = pt.Y
EndFunctionPublicSharedOperator =(pt1 As Point, pt2 As Point) AsBooleanReturn pt1.Equals(pt2)
EndOperatorPublicSharedOperator <>(pt1 As Point, pt2 As Point) AsBooleanReturnNot pt1.Equals(pt2)
EndOperatorEndClass
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Отзыв о .NET
.NET — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв:
Присоединитесь к серии встреч для создания масштабируемых решений искусственного интеллекта на основе реальных вариантов использования с другими разработчиками и экспертами.