Если ссылочный тип не переопределяет Equals / GetHashCode, словарь, использующий компаратор по умолчанию, не будет заботиться о каких-либо полях или свойствах ключевых объектов и, следовательно, не будет замечать или заботиться об их изменении. Проще всего думать, что метод GetHashCode по умолчанию возвращает число, относящееся к «идентификатору объекта», а метод Equals по умолчанию сравнивает «идентификаторы объекта». Действительно, в системе, ограниченной двумя миллиардами или менее объектами, GetHashCode может просто возвращать идентификатор объекта, но по разным причинам он может выполнять и другие действия.
Если единственной частью объекта, которая проверяется Equals или GetHashCode, является идентификатор объекта, то для целей этих функций все объекты являются неизменяемыми. После создания объекта у него всегда будет один и тот же идентификатор, и этот идентификатор никогда не будет использоваться для других объектов, пока все следы прежнего идентификатора объекта не исчезнут из юниверса.