【发布时间】:2011-07-25 21:56:07
【问题描述】:
我实现了一个重载== 和!= 运算符的类。
这似乎工作正常;但是,我收到警告 'type' defines operator == or operator != but does not override Object.Equals(object o)。
好的,所以我实现了 Equals。但现在我收到警告'type' defines operator == or operator != but does not override Object.GetHashCode()。
这会在某个时候结束吗?或者我是否因为想超载== 和!= 而陷入永无止境的需求轨迹?
【问题讨论】:
-
快速术语更正:您不覆盖运算符-您重载它们。
-
当你覆盖
Equals时,你也需要覆盖GetHashCode,因为它会根据哈希函数检查相等性。 -
@IgorisAzanovas 不,Equals 不会检查基于哈希函数的相等性(除非您重载它并专门以这种方式对其进行编码)。散列函数用于支持散列集合,预计不会生成唯一值,理想情况下只会生成一个不经常使用的值。
标签: c# operator-overloading equals gethashcode