Sobes.tech
Junior — Middle

Proč je důležité přepsat metodu GetHashCode ve třídách?

sobes.tech AI

Odpověď od AI

Přepsání metody GetHashCode je důležité pro správnou funkci objektů v kolekcích založených na hašování, jako jsou Dictionary, HashSet a další.

Důvody:

  • GetHashCode vrací číselnou hodnotu, která se používá k rychlému vyhledávání objektu v hašovacích tabulkách.
  • Pokud jsou dva objekty považovány za rovné (podle metody Equals), měli by vracet stejný hašovací kód, aby je kolekce správně zpracovávaly.
  • Pokud GetHashCode není přepsáno spolu s Equals, mohou být objekty nesprávně porovnávány nebo duplikovány v kolekcích.

Příklad:

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);
    }
}

Tímto způsobem zajišťuje přepsání GetHashCode konzistenci s Equals a správnou funkci objektů v hašových strukturách.