首页 > 后端开发 > C++ > 为什么在覆盖`equals'时覆盖了' gethashcode”?

为什么在覆盖`equals'时覆盖了' gethashcode”?

Susan Sarandon
发布: 2025-02-02 15:11:08
原创
285 人浏览过

Why Is Overriding `GetHashCode` Crucial When Overriding `Equals`?

覆盖GetHashCode:覆盖的必要结果Equals

>

Equals>当您覆盖类中的GetHashCode方法时,覆盖

变得至关重要。 如果您打算将班级的实例用作基于哈希的集合(例如字典或哈希集)中的钥匙,则尤其如此。

> GetHashCode

的重要性 GetHashCode>通常被低估的方法在确定平等方面起着至关重要的作用。如果两个对象产生不同的哈希码,则不管方法的结果如何,它们立即被视为不等。 Equals

基本的行为一致性

方法必须与

方法的逻辑对齐,遵守以下规则:>

GetHashCode如果两个对象相等(Equals),则它们

必须
    返回相同的哈希代码。
  • Equals(...) == true如果两个对象具有相同的哈希代码,则它们不一定是>等于。这代表了哈希碰撞,促使呼叫进行确定的平等验证。
  • 有效Equals实现
在返回单个字段的哈希代码(例如示例中的“ fooid”)时,在简单的情况下可能需要一种更健壮的方法,而当多个属性有助于平等时,则需要更强大的方法。 一种常见的技术是结合这些属性的哈希码:>

>现代框架通常提供辅助类别(例如某些语言中的GetHashCode)来简化此过程。

完成图片:操作员过载

>
<code class="language-csharp">int hash = 13;
hash = (hash * 7) + field1.GetHashCode();
hash = (hash * 7) + field2.GetHashCode();
// ... add more fields as needed
return hash;</code>
登录后复制
为了增强代码的可读性和开发人员的经验,请考虑覆盖

HashCode>运算符以补充

>和

覆盖。>

以上是为什么在覆盖`equals'时覆盖了' gethashcode”?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板