我开始学习运算符重载,在一个示例代码中,我发现这两个方法是(public override bool equals(object obj)
和public override int gethashcode()
)。我不明白为什么他们在那里,因为当我对这个程序进行了调试时,我没有看到编译器进入它们。我不知道他们在做什么或者我压倒什么。
有人可以帮助我并解释一下吗?
答案 0 :(得分:1)
.NET中的大多数类型都来自System.Object
类型,在C#中简称为object
。 (例如,接口不会,但是它们的实现会这样做。)
System.Object
声明方法Equals
和GetHashCode
以及其他成员。 (注意:案例在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中就足够了。)