Why 获取哈希码是对象类的一部分吗?只有一小部分类的对象用作哈希表中的键。当我们希望类的对象作为哈希表中的键时,拥有一个必须实现的单独接口不是更好吗?
MS 团队决定将此方法包含在对象类中,从而使其“随处”可用,肯定是有原因的。
在我看来,这是从 Java 复制的设计错误。
在我的完美世界里:
-
ToString
将被重命名ToDebugString
适当设定期望
-
Equals
and GetHashCode
会消失的
- 会有一个
ReferenceEqualityComparer
实施IEqualityComparer<T>
:目前,其中的 equals 部分很容易,但是如果它被覆盖,则无法获得“原始”哈希码
- 对象不会有与其关联的监视器:
Monitor
会有一个构造函数,并且Enter
/Exit
等将是实例方法。
一般来说,相等(以及散列)会导致继承层次结构出现问题 - 只要您始终可以指定要使用的比较类型(通过IEqualityComparer<T>
)并且对象可以实现IEquatable<T>
如果他们愿意的话,我不明白为什么应该打开它Object
. EqualityComparer<T>.Default
如果可以使用参考实现T
没有实施IEquatable<T>
否则请遵循对象。生活会很愉快。
呃,好吧。当我这样做时,数组协方差是另一个平台错误。如果你想要 C# 中的语言错误,如果你愿意,我可以再开始一次小抱怨;)(到目前为止,它仍然是我最喜欢的语言,但有些事情我希望能以不同的方式完成。)
I've 在博客上谈到了这一点其他地方,顺便说一句。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)