Sobes.tech
Junior — Middle

Kodėl .NET klasėje perrašomi metodai GetHashCode ir Equals?

sobes.tech AI

Atsakymas iš AI

.NET'e, GetHashCode ir Equals metodai yra perrašomi, kad teisingai palygintų objektus ir tinkamai veiktų su kolekcijomis, tokiomis kaip žodynai (Dictionary) ir rinkiniai (HashSet).

  • Equals nustato, kada du objektai laikomi lygiaverčiais.
  • GetHashCode grąžina skaitmeninį kodą, kuris naudojamas greitam objekto paieškai hash lentelėse.

Jei perrašysite tik Equals, bet ne GetHashCode, objektai gali netinkamai veikti hash kolekcijose. Šiuos metodus paprastai perrašinėja kartu, kad užtikrintų nuoseklumą: jei Equals grąžina true dviem objektams, jų GetHashCode turi grąžinti tą patį reikšmę.

Pavyzdys:

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