无法覆盖GetHashCode
and Equals
当重载相等运算符导致编译器产生警告时。为什么改变两者的实现是一个好主意?看完之后Eric Lippert 关于 GetHashCode 的博客文章 http://blogs.msdn.com/b/ericlippert/archive/2011/02/28/guidelines-and-rules-for-gethashcode.aspx似乎 GetHashCode 的基本实现可能没有很多有用的替代方案,为什么编译器我鼓励您更改它?
假设您正在实现一个类。
如果您超载==
那么你正在生成一个类型价值平等相对于参考平等。
鉴于此,现在的问题是“拥有一个实现引用相等的类有多可取”.Equals()
和价值观平等==
?”,答案是“不太理想”。这似乎是一个潜在的混乱来源。(事实上,我现在工作的公司 Coverity 生产了一个缺陷发现工具,可以检查您是否混淆了值正是因为这个原因,相等与引用相等。巧合的是,当我看到你的问题时,我正在阅读它的规范!)
此外,如果您要拥有一个同时实现值和引用相等的类,通常的方法是重写Equals
然后离开==
独自一人,而不是相反。
因此,鉴于您已经超载==
,强烈建议您也覆盖Equals
.
如果你是压倒性的Equals
产生价值平等,那么你就是required覆盖GetHashCode
匹配,如果你读过我链接到的文章,你就会知道。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)