【问题标题】:what are the methods "public override bool equals(object obj)" and "public override int gethashcode()" doing? [closed]“public override bool equals(object obj)”和“public override int gethashcode()”方法是什么? [关闭]
【发布时间】:2012-12-07 00:44:29
【问题描述】:

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

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

【问题讨论】:

  • 文档不清楚吗?
  • 并非如此。如果 System.Object 的文档不清楚,我宁愿根本不使用文档。
  • 对不起,我不小心走错了。然后我找到了正确的,它被清除了。谢谢。

标签: c# methods operator-overloading overriding gethashcode


【解决方案1】:

.NET 中的大多数类型都派生自 System.Object 类型,在 C# 中简称为 object。 (例如,接口没有,但它们的实现有。)

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

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

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

【讨论】:

    【解决方案2】:

    最好先参考文档。

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-07-28
      • 2013-09-07
      • 2022-12-19
      • 2020-04-04
      • 1970-01-01
      • 2016-06-19
      • 2021-09-23
      • 2011-02-08
      • 1970-01-01
      相关资源
      最近更新 更多