2012-12-19 456 views
-5

我开始学习操作符重载,在一个示例代码中,我发现这两种方法是(public override bool equals(object obj)public override int gethashcode())。我不明白他们为什么在那里,因为当我把这个程序搞混时,我没有看到编译器进入它们。我不知道他们在做什么或我压倒一切。什么是“public override bool equals(object obj)”和“public override int gethashcode()”?

有人可以帮我解释吗?

+3

文档不清楚吗? –

+0

不是真的..... – IdoShamriz

+0

不是真的。如果文档不清楚System.Object,我宁愿不使用文档。 – Tilak

回答

1

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

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

Equals的任务是将一个对象与另一个对象进行比较。引用类型的默认实现是比较引用。如果你想改变这种行为,你将不得不重写这个方法。

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

0

最好先引用文档。

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

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

Object.GetHashCode - >作为特定类型的哈希函数。

哈希码是一个数值,用于在进行相等性测试时识别对象。它也可以作为集合中对象的索引。 GetHashCode方法适用于散列算法和数据结构,如散列表。

他们为什么overrides> c#中的所有类型都来自System.Object。如果需要的话,它们是为了派生类来提供替代/合适的这些功能的实现的重载。否则默认实现(在System.Object应该是足够的)。