Sobes.tech
Junior — Middle

Dlaczego ważne jest nadpisanie metody GetHashCode w klasach?

sobes.tech AI

Odpowiedź od AI

Nadpisanie metody GetHashCode jest ważne dla poprawnego działania obiektów w kolekcjach opartych na haszowaniu, takich jak Dictionary, HashSet i innych.

Powody:

  • GetHashCode zwraca wartość numeryczną, która jest używana do szybkiego wyszukiwania obiektu w tablicach haszujących.
  • Jeśli dwa obiekty są uważane za równe (według metody Equals), powinny zwracać ten sam kod hash, aby kolekcje mogły je poprawnie obsługiwać.
  • Jeśli nie nadpiszesz GetHashCode razem z Equals, obiekty mogą być niepoprawnie porównywane lub duplikowane w kolekcjach.

Przykład:

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }

    public override bool Equals(object obj)
    {
        if (obj is Person other)
            return Name == other.Name && Age == other.Age;
        return false;
    }

    public override int GetHashCode()
    {
        return HashCode.Combine(Name, Age);
    }
}

W ten sposób nadpisanie GetHashCode zapewnia spójność z Equals i poprawne działanie obiektów w strukturach hash.