什么时候需要在.NET类中重写Equals()?

时间:2010-06-07 23:19:09

标签: .net equality

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

如果所需的Equals()和==行为是验证对象的每个字段是否等于另一个对象的每个字段,是否需要使用明确执行此操作的方法来覆盖Equals()?

2 个答案:

答案 0 :(得分:5)

如果你正在上课,那么是的,这是必要的。

对于引用类型(类),.NET默认提供相等比较,比较引用本身,而不是类中的值。如果您想要逐个字段比较,则需要覆盖等于。

使用结构(值类型),默认比较是逐个字段比较。

来自the documentation

  

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

答案 1 :(得分:1)

你很少需要这样做。

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

有一些例外,String类是一个值得注意的例子。 2个字符串上的平等将逐字符地比较它们。但请注意,String的所需行为是值类型,而字符串没有“标识”。