Hash Ci jednoznacznie zidentyfikuje obiekt, jeśli go tak napiszesz. Jeśli np. Twoja metoda GetHashCode będzie wyglądała tak:
return a + b + c + d;
To na pewno nie będziesz miał unikalnych haszy.
Jeśli używasz w jakiś sposób domyślnej metody, musisz uważać na to, co pisze MS:
Two objects that are equal return hash codes that are equal. However, the reverse is not true: equal hash codes do not imply object equality, because different (unequal) objects can have identical hash codes. Furthermore, the .NET Framework does not guarantee the default implementation of the GetHashCode method, and the value this method returns may differ between .NET Framework versions and platforms, such as 32-bit and 64-bit platforms. For these reasons, do not use the default implementation of this method as a unique object identifier for hashing purposes
(https://msdn.microsoft.com/pl-pl/library/system.object.gethashcode(v=vs.110).aspx)
W prawdzie nie spotkałem się z tym, żeby różne obiekty dały ten sam hash code, ale to jest możliwe. Chociaż jestem ciekawy, czy ktoś wie, jaka jest szansa na to?