Sobes.tech
Junior — Middle

Prečo je dôležité prepísať metódu GetHashCode v triedach?

sobes.tech AI

Odpoveď od AI

Prepísanie metódy GetHashCode je dôležité pre správne fungovanie objektov v kolekciách založených na hashovaní, ako sú Dictionary, HashSet a ďalšie.

Dôvody:

  • GetHashCode vracia číselnú hodnotu, ktorá sa používa na rýchle vyhľadávanie objektu v hash tabuľkách.
  • Ak sú dva objekty považované za rovnaké (podľa metódy Equals), mali by vracať rovnaký hash kód, aby ich kolekcie správne spracovávali.
  • Ak GetHashCode nie je prepísané spolu s Equals, objekty môžu byť nesprávne porovnávané alebo duplikované v kolekciách.

Prí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 spôsobom zabezpečuje prepísanie GetHashCode konzistenciu s Equals a správne fungovanie objektov v hashových štruktúrach.