是否所有c#类都重写Equals和GetHashCode?为了正确
答案 0 :(得分:10)
不,他们已经这样做了。
是否必须覆盖它们,取决于它的使用方式。在大多数情况下,不需要它。
答案 1 :(得分:3)
所有类都已从基类System.Object继承这些方法。
如果您需要能够比较对象的两个实例超出简单引用相等性,则可以选择覆盖派生类中的方法,否则就没有必要。
但是,请记住,如果您选择覆盖其中一个,则还需要覆盖另一个,以确保Hashtables和字典键(以及其他功能)与您的派生类一起正常工作。 GetHashCode方法需要反映与Equals方法相同的逻辑。有关更多说明和示例,请参见此处:
http://msdn.microsoft.com/en-us/library/bsc2ak47.aspx
和
http://msdn.microsoft.com/en-us/library/system.object.gethashcode.aspx
答案 2 :(得分:2)
所有要从System.Object
继承此内容的类。
如果需要为类提供特定的Equals或GetHashCode,则应覆盖类中的方法。否则就离开他们..
http://msdn.microsoft.com/en-us/library/system.object.gethashcode(v=VS.71).aspx
答案 3 :(得分:0)
也许不是全部,但是所有将被放入某种包(IList,ICollection,IDictionary,Hashset等)的类并需要一些简单的方法来区分它们(只需考虑Sort()
, Contains()
,BinarySearch()
等。)
如果你以这种方式使用课程,你绝对应该实施正确。
答案 4 :(得分:0)
基本上覆盖
Equals
时。 当你想提供不同的 平等的想法比简单的参考 平等。字符串就是一个很好的例子 - 两个 字符串相等(简单 等于电话)如果他们代表 相同的字符序列。哈希 代码反映了这一点,如果两个 字符串是相同的,他们将拥有 相同的哈希码。 (反过来不是 必然是真的 - 两个不相等的字符串 可以有相同的哈希码,但它是 不可能的。)
(字符串在其他方面很棘手, 请注意 - 有很多不同的东西 基于文化和文化的平等观念 套管,但
String.Equals
只是看起来 在UTF-16代码点上 字符串,并将它们进行比较 最简单的可想象的时尚。)