Sobes.tech
Junior — Middle

Prečo v triede .NET prepisujú metódy GetHashCode a Equals?

sobes.tech AI

Odpoveď od AI

V .NET sú metódy GetHashCode a Equals prepísané tak, aby správne porovnávali objekty a správne fungovali s kolekciami, ako sú slovníky (Dictionary) a množiny (HashSet).

  • Equals určuje, kedy sú dva objekty považované za rovné.
  • GetHashCode vracia číselný kód, ktorý sa používa na rýchle vyhľadávanie objektu v hash tabuľkách.

Ak prepíšete iba Equals, ale nie GetHashCode, objekty môžu v hash kolekciách fungovať nesprávne. Tieto metódy sa zvyčajne prepíšu spolu, aby bola zabezpečená konzistencia: ak Equals vracia true pre dva objekty, ich GetHashCode by mal vracať rovnakú hodnotu.

Príklad:

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