#406 – Overriding the Equals Method
September 7, 2011 2 Comments
You can override the Equals method in a custom type to implement value equality for two instances of the type.
Guidelines to follow when overriding Equals include:
- x.Equals(x) should return true
- x.Equals(y) should return the same value as y.Equals(x)
- x.Equals(y) and y.Equals(z) implies that x.Equals(z)
- Repeated calls to x.Equals(y) return the same result, for the same values of x and y
- x.Equals(null) returns false
Additionally:
- When you override Equals, you should also override GetHashCode
Here’s the implementation of Equals for the Dog class:
// Are two Dogs equivalent? public override bool Equals(object obj) { // Can't be null if (obj == null) return false; // Must be a Dog if (obj is Dog) { // Compare the dogs Dog d2 = (Dog)obj; return (Name == d2.Name) && (Age == d2.Age); } else return false; }
Here’s the override of GetHashCode.
public override int GetHashCode() { return Name.GetHashCode() ^ Age; }
“When you override Equals, you should also override GetHashCode”
Why?
Good question. You’re anticipating tomorrow’s post, which is already written and just waiting to be published– “Why You Should Override GetHashCode When Overriding Equals”.