Sobes.tech
Junior — Middle

Dlaczego w klasie .NET nadpisuje się metody GetHashCode i Equals?

sobes.tech AI

Odpowiedź od AI

W .NET metody GetHashCode i Equals są nadpisywane, aby poprawnie porównywać obiekty i prawidłowo działać z kolekcjami takimi jak słowniki (Dictionary) i zbiory (HashSet).

  • Equals określa, kiedy dwa obiekty są uważane za równe w sensie.
  • GetHashCode zwraca kod numeryczny, który jest używany do szybkiego wyszukiwania obiektu w tabelach hash.

Jeśli nadpiszesz tylko Equals, ale nie GetHashCode, obiekty mogą działać niepoprawnie w kolekcjach hash. Te metody zwykle nadpisuje się razem, aby zapewnić spójność: jeśli Equals zwraca true dla dwóch obiektów, ich GetHashCode powinien zwracać tę samą wartość.

Przykład:

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