Okay, so if I override Equals, I need to override GetHashCode and vice versa.
But I just wonder: Should I always override these two in any class? Especially if I kno
Only if you want Value semantics. From MSDN:
For some kinds of objects, it is desirable to have Equals test for value equality instead of referential equality. Such implementations of Equals return true if the two objects have the same value, even if they are not the same instance. The definition of what constitutes an object's value is up to the implementer of the type, but it is typically some or all of the data stored in the instance variables of the object. For example, the value of a string is based on the characters of the string; the Equals method of the String class returns true for any two instances of a string that contain exactly the same characters in the same order.