Sobes.tech
Junior — Middle

Miért írják felül a GetHashCode és az Equals metódusokat egy .NET osztályban?

sobes.tech MI

Válasz az MI-től

A .NET-ben a GetHashCode és Equals metódusokat felülírják az objektumok helyes összehasonlítása és a kollekciókkal, például Szótárak (Dictionary) és Halmazok (HashSet), való helyes működés érdekében.

  • Az Equals meghatározza, mikor tekintünk két objektumot egyenlőnek.
  • A GetHashCode egy numerikus kódot ad vissza, amit a gyors kereséshez használnak hash táblákban.

Ha csak az Equals-t írja felül, de a GetHashCode-ot nem, az objektumok helytelenül működhetnek hash kollekciókban. Ezek a metódusok általában együtt vannak felülírva, hogy biztosítsák a konzisztenciát: ha az Equals igazat ad két objektumra, akkor a GetHashCode ugyanazt az értéket kell, hogy adja.

Példa:

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