Контракт для GetHashCode()
требует этого, но, поскольку каждый может сделать свою собственную реализацию, это никогда не гарантируется.
Многие классы (особенно хеш-таблицы) требуют его для правильного поведения.
Если вы реализуете класс, вы всегда должны убедиться, что два равных объекта имеют одинаковый хэш-код.
Если вы реализуете служебный метод / класс, вы можете предположить, что два равных объекта имеют одинаковый хеш-код (если нет, то это глючит другой класс, а не ваш).
Если вы реализуете что-то с последствиями для безопасности, вы не можете принять это.