.NET包含自己的相等比较功能,但我真的不明白它是如何工作的。
如果所需的Equals()和==
行为是验证对象的每个字段是否等于另一个对象的每个字段,是否需要使用明确执行此操作的方法来覆盖Equals()?
答案 0 :(得分:5)
如果你正在上课,那么是的,这是必要的。
对于引用类型(类),.NET默认提供相等比较,比较引用本身,而不是类中的值。如果您想要逐个字段比较,则需要覆盖等于。
使用结构(值类型),默认比较是逐个字段比较。
Equals的默认实现支持引用类型的引用相等性和值类型的按位相等性。引用相等意味着被比较的对象引用引用相同的对象。按位相等意味着被比较的对象具有相同的二进制表示。
答案 1 :(得分:1)
你很少需要这样做。
类的默认行为是使用ReferenceEquality:两个引用只有在指向完全相同的实例时才相等。这是业务对象的良好匹配,它们通常与现实世界中的1个对象匹配,并且您不需要重复。
有一些例外,String类是一个值得注意的例子。 2个字符串上的平等将逐字符地比较它们。但请注意,String的所需行为是值类型,而字符串没有“标识”。