gpt4 book ai didi

c# - 为什么要在重载相等运算符时覆盖 GetHashCode 和 Equals?

转载 作者:太空狗 更新时间:2023-10-29 22:16:22 25 4
gpt4 key购买 nike

重载相等运算符时未能覆盖 GetHashCodeEquals 会导致编译器产生警告。为什么改变其中任何一个的实现是个好主意?看完Eric Lippert's blog post on GetHashCode似乎 GetHashCode 的基本实现可能没有很多有用的替代品,为什么我鼓励您更改它的编译器?

最佳答案

假设您正在实现一个类。

如果您正在重载 ==,那么您将生成一个具有值相等性 的类型,而不是引用 相等性。

鉴于此,现在的问题是“拥有一个在 .Equals() 中实现引用相等并在 == 中实现值相等的类有多理想?”答案是“不太理想”。这似乎是一个潜在的困惑来源。 (事实上​​,我现在工作的公司 Coverity 生产了一个缺陷发现工具,可以检查你是否正是出于这个原因混淆了值相等和引用相等。巧合的是,当我看到它时,我正在阅读它的规范你的问题!)

此外,如果您要创建一个同时实现值相等和引用相等的类,通常的做法是重写 Equals 并单独保留 == ,而不是相反。

因此,鉴于您重载了==,强烈建议您也重写Equals

如果您重写 Equals 以产生值相等,那么您需要重写 GetHashCode 以进行匹配,正如您知道的那样阅读您链接到的我的文章。

关于c# - 为什么要在重载相等运算符时覆盖 GetHashCode 和 Equals?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16655524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com