代码之家  ›  专栏  ›  技术社区  ›  Alex Angas Colin

何时需要重写.NET类中的equals()?

  •  3
  • Alex Angas Colin  · 技术社区  · 14 年前

    .NET包含自己的相等比较功能,但我不太了解它是如何工作的。

    如果所需的等于()和 == 行为是为了验证一个对象的每个字段是否等于另一个对象的每个字段,是否需要用一个显式执行此操作的方法重写equals()?

    2 回复  |  直到 14 年前
        1
  •  5
  •   Reed Copsey    14 年前

    如果你在班上工作,那么是的,这是必要的。

    对于引用类型(类),.NET默认情况下提供相等比较,比较引用本身,而不是类中的值。如果需要逐字段比较,则需要重写Equals。

    对于结构(值类型),默认比较是逐字段比较。

    the documentation :

    Equals的默认实现支持引用类型的引用相等和值类型的按位相等。引用相等表示比较的对象引用引用的是同一对象。按位相等意味着被比较的对象具有相同的二进制表示。

        2
  •  1
  •   Henk Holterman    14 年前

    你很少需要这样做。

    类的默认行为是使用referenceequality:只有当两个引用指向完全相同的实例时,它们才相等。对于业务对象来说,这是一个很好的匹配,它们通常与现实世界中的1个对象匹配,您不需要重复。

    有例外,字符串类是一个值得注意的例子。两个字符串上的相等将逐字符比较它们。但请注意,字符串所需的行为是值类型的行为,并且字符串没有“标识”。