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

Ale*_*gas 3 .net equality

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

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

Ree*_*sey 5

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

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

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

文档:

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

  • 同样值得注意的是,如果你重写`Equals`,你通常也应该覆盖`GetHashCode()`. (3认同)