Start here. This is the direct spoken answer to practice first.
Why this question matters
Equality is not only about whether two comparisons return true. Hash-based collections depend on a stable contract, so a poor equality design can make an existing key appear to disappear.
If two values are equal according to Equals, they must return the same hash code during the time they are used in a hash-based collection. Unequal values may share a hash code, so the collection still uses equality to resolve collisions. Classes use reference identity by default unless they override equality, while records generate value-based equality from their components. For a dictionary key I want equality to represent the key's real identity and every participating value to remain stable after insertion.