Inc*_*ito 8 .net c# language-agnostic clr
为什么GetHashCode是Object类的一部分?只有一小部分对象用作哈希表中的键.当我们希望类的对象作为哈希表中的键时,必须实现一个单独的接口,这不是更好吗?
必须有一个原因,MS团队决定将此方法包含在Object类中,从而使其"无处不在".
Jon*_*eet 17
这是从Java,IMO复制的设计错误.
在我完美的世界里:
ToString
将被重命名ToDebugString
以适当地设定期望Equals
并且GetHashCode
会消失ReferenceEqualityComparer
实现IEqualityComparer<T>
:此时平等部分很容易,但如果被覆盖则无法获得"原始"哈希码Monitor
将具有构造函数,而Enter
/ Exit
etc将是实例方法.平等(因而散列)通常会导致继承层次结构中出现问题 - 只要您始终可以指定要使用的比较类型(通过IEqualityComparer<T>
),并且对象可以IEquatable<T>
根据需要自行实现,我不明白为什么它应该继续Object
.EqualityComparer<T>.Default
如果T
没有实现IEquatable<T>
,则可以使用引用实现,否则将推迟到对象.生活会很愉快.
呃,好吧.虽然我在这,但阵列协方差是另一个平台错误.如果你想在C#中出现语言错误,如果你愿意,我可以开始另一个小咆哮;)(它仍然是我最喜欢的语言,但有些事我希望以不同的方式完成.)
归档时间: |
|
查看次数: |
505 次 |
最近记录: |