有什么方法“public override bool equals(object obj)”和“public override int gethashcode()”做什么?

时间:2012-12-19 15:57:19

标签: c# methods operator-overloading override gethashcode

我开始学习运算符重载,在一个示例代码中,我发现这两个方法是(public override bool equals(object obj)public override int gethashcode())。我不明白为什么他们在那里,因为当我对这个程序进行了调试时,我没有看到编译器进入它们。我不知道他们在做什么或者我压倒什么。

有人可以帮助我并解释一下吗?

2 个答案:

答案 0 :(得分:1)

.NET中的大多数类型都来自System.Object类型,在C#中简称为object。 (例如,接口不会,但是它们的实现会这样做。)

System.Object声明方法EqualsGetHashCode以及其他成员。 (注意:案例在C#中很重要)。您创建的类型会自动继承这些方法。

Equals的任务是将对象与另一个对象进行比较。引用类型的默认实现是比较引用。如果要更改此行为,则必须覆盖此方法。

GetHashCode计算对象的哈希码,并在哈希表中使用。例如,Dictionary<TKey,TValue>HashSet<T>类型可以使用它。 见Hashtable and Dictionary Collection Types。如果您覆盖Equals,则必须覆盖GetHashCode以保持一致性。

答案 1 :(得分:0)

最好先参考文档。

Object.Equals - &gt;确定指定的对象是否等于当前对象。

  

当前实例与obj参数之间的比较类型取决于当前实例是引用类型还是值类型。如果当前实例是引用类型,则Equals(Object)方法测试引用相等性,并且对Equals(Object)方法的调用等效于对ReferenceEquals方法的调用。引用相等意味着比较的对象变量引用同一个对象。

Object.GetHashCode - &gt;用作特定类型的哈希函数。

  

哈希码是一个数值,用于在相等测试期间标识对象。它还可以充当集合中对象的索引。   GetHashCode方法适用于散列算法和数据结构,例如散列表。

为什么他们overrides&gt; c#中的所有类型都来自System.Object。如果需要,它们是覆盖以提供派生类的能力以提供这些功能的替代/适当实现。否则默认实现(在System.Object中就足够了。)